【问题标题】:Do not wait for a promise to execute and resolve it immediately [duplicate]不要等待承诺立即执行并解决它[重复]
【发布时间】:2021-06-23 00:02:42
【问题描述】:

我有一个下游 API 调用,它基本上返回一个 Promise 对象,而不是解析它并立即执行它。 这就是我调用下游的方式:

const response = testClient.getSession(sessionId);

当我console.log(response) 时,它被打印为Promise { <pending> },而不是它应该从下游打印的期望结果。

对 Async/Await、Promises 等知之甚少,我想知道它属于哪个类别?以及如何首先执行该承诺并执行其余步骤。

但是,我找到了这样的临时解决方法:

 response.then(function(result) {
      console.log(result.body);
 });

但理想情况下,我希望将结果存储到响应对象中。请帮助我理解这一点。提前致谢

【问题讨论】:

标签: javascript json ecmascript-6 async-await promise


【解决方案1】:

您所谓的使用then 的临时解决方法实际上是等待Promise 完成的正确方法。您不能“强制”它实现,因为代码将尽可能快地执行并允许您继续工作直到那时(这是承诺的重点) - 但您可以等待它实现:

您还应该使用catch 检查承诺是否被“拒绝” - 即产生错误:

 response.then( function(result) {
    console.log(result.body);
 }).catch( function(error) {
    console.log(error);
});

使用等待:

async function thingy(){
    const response = await testClient.getSession(sessionId);
}

使用 await 并检查错误:

async function thingy(){
    try {
        const response = await testClient.getSession(sessionId);
    } catch (error) {
        console.error(error);
    }
}

请注意,当使用async 时,您通常需要在function declared as async 中。

Promise 的想法是让你的程序在你等待承诺被履行/拒绝的同时继续做事——例如,你可能一次提出多个请求,wait for them all:

Promise.all([
    getStuff('one'),
    getStuff('two'),
    getStuff('n')
]);

【讨论】:

    猜你喜欢
    • 2018-04-17
    • 1970-01-01
    • 2019-04-29
    • 2018-02-25
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多