gpt4 book ai didi

javascript - 当 promise 得到解决时,异步函数不会返回

转载 作者:行者123 更新时间:2023-12-02 23:23:51 24 4
gpt4 key购买 nike

我有以下代码:

let checkValue = async (nodeUrl, nodeName, value) => {

let json = await getValue(nodeUrl, value);

let obj = JSON.parse(json.value.information);

for (let i = 0; i < obj.nodes.length; i++) {
if (obj.nodes[i] === nodeName) {
return Promise.resolve(true);
}
}
return Promise.resolve(false);
}

我尝试使用Promise.resolve()处理返回的 Promise 值,但我仍然得到 Promise { <pending> }返回。为什么会发生这种情况?

最佳答案

让我们解释一下 async 中发生的情况功能。

首先,所有异步函数都会返回一个 Promise。总是。您始终需要使用 .then()await从返回的 promise 中获取值。

其次,这是函数中的事件顺序。

  1. 您调用checkValue(...)并传递其参数。
  2. 第一行执行await getValue()
  3. 这会调用getValue()并收到回信。
  4. 既然你正在做 await ,它会暂停该函数的进一步执行,并且在该时间点,该函数返回一个 Unresolved promise 。
  5. 您所看到的正是未兑现的 promise 。
  6. 同时,调用 getValue() 之后的其余代码继续执行。
  7. 稍后,当 JS 解释器完成正在执行的操作并转到下一个事件的事件队列时,它将找到一个导致 getValue() 的事件。兑现其 promise 。
  8. 此时,getValue() 的解析值 promise 分配给您的 json变量和 checkValue() 的执行功能未暂停并继续。
  9. 然后,根据 for 中的值循环,你的函数将通过返回一个已解决的 promise 来完成。请注意,没有理由这样做 return Promise.resolve(true)return Promise.resolve(false) 。就return truereturn value这就是所需要的一切。不管怎样return值来自async函数成为已从该函数返回的 promise 的解析值。口译员会为您做这件事。

I tried to use Promise.resolve() to process the returned Promise value, but I still get Promise { <pending> } return. Why is this happening?

首先,你会得到一个 promise ,因为所有 async函数返回一个 promise 。

其次,当您检查它时,它尚未解决,因为该函数在第一个 await 处被暂停。就在那时async函数实际上返回了 promise ,但此时它尚未解决,因为该函数尚未完成执行(由于 await )。请参阅上面的步骤 4。

关于javascript - 当 promise 得到解决时,异步函数不会返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56825883/

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