我在從 for 回圈中呼叫的異步函式取回結果時遇到了一點麻煩,我應該取回一個字串,但它回傳的是一個承諾,而不是我遵循這種語法,但我無法讓它正常作業,我希望能深入了解為什么會失敗https://eslint.org/docs/rules/no-await-in-loop
這是我要使用的函式,在這種情況下 decodeTheObject 是異步的并回傳一個承諾,但是如果我使用await decodeTheObjecteslint 會給我一個錯誤,說我不能在 for 回圈中使用 await,不幸的是,上面的解決方法仍然會導致承諾回傳而不是決議值
async function decode (request, encodedObj) {
const decodedArr = [];
try{
for (const id of encodedObj) {
decodedArr.push({
data: decodeTheObject(request, id), // this is an async function
partial: true,
});
}
await Promise.all(decodedArr);
return decodedArr;
}catch (err) {
throwError(
req,
{
errorDetails: [
{
issue: 'INVALID_ENCODING',
description: 'Invalid encoded obj',
},
],
},
);
}
};
// ----- calling function -----
const decodedObj = await decode(request, encodedItem);
const payload = {
newprop: decodedObj
};
uj5u.com熱心網友回復:
Promise.all()必須直接處理一系列承諾。您正在向它傳遞一個物件陣列,這些物件不知道如何進入物件以獲取承諾,因此,它不會完成任何有用的事情。有幾種方法可以解決這個問題。
這將按順序等待每個異步呼叫,獲取值并將值推送到陣列中:
async function decode (request, encodedObj) {
const decodedArr = [];
try{
for (const id of encodedObj) {
let data = await decodeTheObject(request, id);
decodedArr.push({data, partial: true});
}
return decodedArr;
} catch(e) {
...
}
}
Promise.all()或者,您可以通過創建一組 promise 并在該陣列上使用來并行運行它們Promise.all():
async function decode (request, encodedObj) {
return Promise.all(encodedObj.map(id => {
return decodeTheObject(request, id).then(data => {
return {data, partial: true};
});
})).catch(err => {
...
});
}
uj5u.com熱心網友回復:
您缺少一個await關鍵字。此外,“encodedObj”引數需要“強制”為異步迭代。請參閱等待...的。
async function decode (request, encodedObj) {
const decodedArr = [];
try{
for await (const id of encodedObj) {
decodedArr.push({
data: decodeTheObject(request, id), // this is an async function
partial: true,
});
}
await Promise.all(decodedArr);
return decodedArr;
}catch (err) {
throwError(
req,
{
errorDetails: [
{
issue: 'INVALID_ENCODING',
description: 'Invalid encoded obj',
},
],
},
);
}
};
// ----- calling function -----
const decodedObj = await decode(request, encodedItem);
const payload = {
newprop: decodedObj
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416568.html
標籤:
上一篇:如何使這種大小寫不敏感
下一篇:如何移動x軸上每個分類變數的半小提琴圖(外部)、箱線圖(中間)和geom_points(內部)?ggplot2,R
