我正在使用 await 呼叫此函式并將資料存盤在結果變數中。但是該函式在沒有完成 foreach 回圈的情況下回傳。僅當 foreach 回圈結束時,如何使此函式回傳?
let result = await prepareStocks(data);
async function prepareStocks(incomingStocks) {
var stockCodes = incomingStocks.stocks.split(',');
var stockPrices = incomingStocks.trigger_prices.split(',');
var alertName = incomingStocks.alert_name;
stockCodes.forEach(async(stocks, index) => {
if (stockPrices[index] > 100) {
var stockCodes = {
code: stocks,
price: stockPrices[index],
orderType: (urls.buy.includes(alertName) ? 'BUY' : 'WATCH'),
target: await setSellPrice(stockPrices[index], 1),
stopLoss: await setStopLoss(stockPrices[index], 1),
}
STOCKS.push(stockCodes);
}
});
return STOCKS;
}
uj5u.com熱心網友回復:
嘗試使用Promise.all
像這樣的東西=>
let result = await prepareStocks(data);
async function prepareStocks(incomingStocks) {
var stockCodes = incomingStocks.stocks.split(',');
var stockPrices = incomingStocks.trigger_prices.split(',');
var alertName = incomingStocks.alert_name;
const STOCKS = await Promise.all(stockCodes.map(async (stocks, index) => {
if (stockPrices[index] > 100) {
var stockCodes = {
code: stocks,
price: stockPrices[index],
orderType: (urls.buy.includes(alertName) ? 'BUY' : 'WATCH'),
target: await setSellPrice(stockPrices[index], 1),
stopLoss: await setStopLoss(stockPrices[index], 1),
}
return stockCodes;
}
})
return STOCKS;
}
uj5u.com熱心網友回復:
在閱讀了 async/await 部分之后,我想知道 async/await 的使用方式沒有任何問題,并且STOCKS必須回傳預期值。因此,我按如下方式設定模擬并運行代碼。
async function setSellPrice(price) { return new Promise(function resolver(resolve) {setTimeout(function someTimeLater() { resolve(price)});}); }
async function setStopLoss(price) { return new Promise(function resolver(resolve) {setTimeout(function someTimeLater() { resolve(price)});}); }
const data = { stocks: 'A,B,C'. trigger_prices: '100,120,140', alert_name: 'XYZ' };
let result = await prepareStocks(data);
并STOCKS沒有定義錯誤。
您的代碼在作業方式方面是正確的async/await。原始代碼的問題是,STOCKS變數沒有定義。我假設,它沒有在其他任何地方定義。因此,按預期執行以下作業。
let result = await prepareStocks(data);
async function prepareStocks(incomingStocks) {
const STOCKS = [];
var stockCodes = incomingStocks.stocks.split(',');
var stockPrices = incomingStocks.trigger_prices.split(',');
var alertName = incomingStocks.alert_name;
stockCodes.forEach(async(stocks, index) => {
if (stockPrices[index] > 100) {
var stockCodes = {
code: stocks,
price: stockPrices[index],
orderType: (urls.buy.includes(alertName) ? 'BUY' : 'WATCH'),
target: await setSellPrice(stockPrices[index], 1),
stopLoss: await setStopLoss(stockPrices[index], 1),
}
STOCKS.push(stockCodes);
}
});
return STOCKS;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/466649.html
