gpt4 book ai didi

javascript - 优化异步调用(.then() 链接)

转载 作者:行者123 更新时间:2023-11-30 11:25:25 26 4
gpt4 key购买 nike

我是异步 javascript 代码的新手,希望在我当前的 node.js 项目 (express.js api) 中越来越多地使用它。

我的 GET 路由有这个功能,它可以工作,但显然不是正确的方法:

portfolio: function(req, res, next) {
const ethCoins = 0.001;
const ltcCoins = 0.789;
const xrpCoins = 0.987;
const xrbCoins = 0.123;
const btcCoins = 0.321;
let ethSum, btcSum, ltcSum, xrpSum, xrbSum, cryptoSum;

let ethValue = ccHelper.coinInUSD('ETH', ethCoins);
let ltcValue = ccHelper.coinInUSD('LTC', ltcCoins);
let xrpValue = ccHelper.coinInUSD('XRP', xrpCoins);
let xrbValue = ccHelper.coinInUSD('XRB', xrbCoins);
let btcValue = ccHelper.coinInUSD('BTC', btcCoins);

ethValue.then(result => {
ethSum = result;
ltcValue.then(result => {
ltcSum = result;
xrpValue.then(result => {
xrpSum = result;
xrbValue.then(result => {
xrbSum = result;
btcValue.then(result => {
btcSum = result;
let coinSum = ethSum + ltcSum + xrpSum + xrbSum + btcSum;
res.json(coinSum);
})
})
})
})
})
},

函数ccHelper.coinInUSD调用这个(需要引用):

coinInUSD: function(crypto, amount){
return cc.price(crypto, 'USD')
.then(prices => {
const priceArray = [];
Object.keys(prices).forEach((key) => {
priceArray.push(prices[key]);
});
let priceSum = priceArray.reduce((a, v) => (a+v), 0);
const currentValue = amount * priceSum;
return currentValue;
}).catch(console.error)
},

有人可以向我解释如何避免这种链接以及正确的模式是什么吗?我这样做是因为我只能设置一次 res.json

最佳答案

你可以使用 Promise.all对于这种事情。

这是一个例子:

const ethCoins = 0.001;
const ltcCoins = 0.789;
const xrpCoins = 0.987;
const xrbCoins = 0.123;
const btcCoins = 0.321;

let ethValue = ccHelper.coinInUSD('ETH', ethCoins);
let ltcValue = ccHelper.coinInUSD('LTC', ltcCoins);
let xrpValue = ccHelper.coinInUSD('XRP', xrpCoins);
let xrbValue = ccHelper.coinInUSD('XRB', xrbCoins);
let btcValue = ccHelper.coinInUSD('BTC', btcCoins);

Promise.all([ethValue, ltcValue, xrpValue, xrbValue, btcValue]).then(values => {
let coinSum = values.reduce((a, v) => (a+v), 0);
res.json(coinSum);
}).catch(e => console.error(e));

关于javascript - 优化异步调用(.then() 链接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48223535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com