这是我调用函数的代码
masterCredsResponse.data.forEach((masterCred) => {
// Check Login status
masterCredsArray.push({
master: masterCred.parent,
loginCheck: Promise.resolve(getSessionID()())
})
})
我在这里得到了
loginCheck: Promise { <pending> }
我看到很多关于这个主题的问题,但无法理解如何完成它。 当我不使用循环而是单独调用它时它就可以工作 喜欢
let loginCheckReponse = await getSessionID()()
但是我在循环中使用这个方法不起作用
loginCheck: await getSessionID()() // Doesn't work
最佳答案
@Samathingamajig 关于 Promise.resolve 的说法是正确的。此外,如果不使回调异步,则无法在 forEach
内部运行 await
。
最基本的修复方法是向回调添加一个async
,向promise添加一个await
。但是,您将无法符合人体工程学地等待阵列完成处理。
masterCredsResponse.data.forEach(async (masterCred) => {
masterCredsArray.push({
master: masterCred.parent,
loginCheck: Promise.resolve(getSessionID())
})
})
您可以使用map
和Promise.all
来确保正确阻止执行。请注意,它们将同时发生:
const masterCredPromises = masterCredsResponse.data.map(
async (masterCred) => ({
master: masterCred.parent,
loginCheck: await getSessionId()
})
);
const masterCredsArray = await Promise.all(masterCredPromises);
希望有帮助!
关于javascript - 无法解决 forEach 中的 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74569136/