javascript - 需要了解为什么内联函数的 Promise 结果未解析为预期的返回结果

标签 javascript node.js asynchronous promise

我正在努力学习更多关于 JavaScript promises 的知识,但在尝试将来自单独函数的一些 promise 逻辑组合到单个内联函数中时遇到了一个问题。当我将其全部拉入单个内联函数时,它会导致 promise 返回结果为“未定义”,而不是预期的“世界”值。

[按预期工作,异步解决 promise ,并为 promise 响应生成“世界”]

app.get('/asyncTest', (request, response) => {
    console.log("Request started...");

    var helloResult = hello()
            .then((res)=> {
                console.log('COMPLETED Promise Result (Promise completed): ' + res)
            });

    console.log('Hello Result (immediately after issuing the promise [still in promise object format]): ' + helloResult);

    console.log('Mesage at the end of the request (Should fire before completion of the promise result being fulfilled...');
});


function wait(ms) {
    return new Promise(r => setTimeout(r, ms));
}

async function hello() {
    await wait(3000);
    return 'world';
}

[不工作 - promise 响应的结果是“未定义”而不是“世界”...]

var helloResult = async (r) => { 
                await new Promise(r => {
                    setTimeout(r, 3000);
                    return 'world';
                })
            };

let helloResponse = helloResult().then((res)=> {
    console.log('COMPLETED Promise Result (Promise completed): ' + res)
})

[不工作—— promise 响应的结果是“未定义”而不是“世界”……]

var helloResult = async () => { 
                await new Promise(r => {
                    setTimeout(r, 3000);
                    return 'world';
                })
                .then((responseData)=> {
                    console.log('COMPLETED Promise Result (Promise completed): ' + responseData)
                })};

出于某种原因,在后 2 次更改代码的尝试中, promise 的结果是“未定义”,而不是“世界”返回结果的预期值。

如有任何建议,我们将不胜感激,感谢您的帮助。

最佳答案

在后面的示例中,您将从 Promise 构造函数回调返回。该值未解析。您必须调用 resolve 回调才能传递值。

await new Promise(r => {
   setTimeout(() => r('world'), 3000);
});

关于javascript - 需要了解为什么内联函数的 Promise 结果未解析为预期的返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57165432/

相关文章:

javascript - 新手/初级 Javascript 请求

node.js - Node.js 的沙盒插件

javascript - 循环中异步函数的最后一个值

java - 如何在 Java 8 中超时后终止异步运行的线程以及这样做的含义

asynchronous - Haxe - 如何为 Flash 目标实现异步等待

javascript - 多项目 webpack 配置建议

javascript - 有没有办法创建一个绑定(bind)函数,在数组中提供它的参数?

javascript - 外部 .js 文件是否需要 <script> 标签?

javascript - Falcor 路由特定中间件

javascript - 如何用 Jest 测试异步等待 pg 连接?