Javascript 解析承诺时,异步函数不会返回

Javascript 解析承诺时,异步函数不会返回,javascript,node.js,asynchronous,async-await,Javascript,Node.js,Asynchronous,Async Await,我有以下代码: 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] === nod

我有以下代码:

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{}return。为什么会发生这种情况?

让我们解释一下异步函数中会发生什么

首先,所有异步函数都返回一个承诺。总是您将始终需要使用。然后或等待从返回的承诺中获取值

其次,这里是函数中的事件序列

你叫checkValue。。。并传递其论点。 第一行执行wait getValue。 这将调用getValue并接收回一个承诺。 由于您正在执行等待,它将暂停函数的进一步执行,并且在该时间点,函数将返回一个未解决的承诺。 你现在看到的就是这个悬而未决的承诺。 同时,调用getValue后的其余代码将继续执行。 稍后,当JS解释器完成正在做的事情并转到下一个事件的事件队列时,它将找到一个导致getValue解析其承诺的事件。 此时,来自getValue承诺的解析值被分配给json变量,并且checkValue函数的执行被取消并继续。 然后,根据for循环中的值,函数将通过返回已解析的承诺来完成。注意,没有理由执行return Promise.resolvetrue或return Promise.resolvefalse。只需返回true或返回值即可。无论异步函数的返回值是什么,都将成为已从该函数返回的承诺的解析值。翻译会帮你做的。 我尝试使用Promise.resolve处理返回的Promise值,但仍然得到Promise{}return。为什么会这样

首先,您得到一个承诺,因为所有异步函数都返回一个承诺


第二,在您检查它时,它是未解决的,因为函数在第一次等待时被挂起,而异步函数实际返回了承诺,此时它是未解决的,因为函数由于等待尚未完成执行。请参阅上面的步骤4。

直接返回true或false。因为checkValue返回是一个承诺。调用checkValue…,然后调用console.log;->打印布尔值。正如Johnny所说,您不需要解析承诺。@JohnnyHK我试过了,但它不起作用。您如何调用此代码?所有异步函数都返回一个承诺。您需要使用.then或在调用函数后等待以获取值。@safqw-这是否回答了您的问题?如果是这样,您可以通过单击答案旁边的复选标记向社区指出这一点。这也将为你赢得一些声誉点在这里遵循正确的程序。