首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >等待在Javascript中返回API结果

等待在Javascript中返回API结果
EN

Stack Overflow用户
提问于 2018-10-04 03:21:15
回答 1查看 187关注 0票数 0

假设我有一个函数,它在1秒后返回输入的结果:

function slowDouble(num) {
    setTimeout(() => {
        return num * 2;
    }, 1000);
}

现在我想调用这个函数并等待返回结果,这样我就可以对它进行其他操作了。我试图将此函数包装在Promise中,但在执行log语句(打印undefined)后,结果被返回给then块:

function promisify(num) {
    return new Promise((resolve) => {
        var res = slowDouble(num);
        resolve(res);
    });
}

function promisifyTest(num) {
    promisify(num).then((res) => {
        console.log('then result ', res);
    })
}

promisifyTest(4); // undefined

然后我试着用await

async function asyncCallToAPI(num) {
    var tt = await promisify(num);
    console.log('async result', tt);
}

asyncCallToAPI(3); // undefined

并得到了相同的undefined结果。我知道这与这里问的其他问题非常相似,但我还不能解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-04 03:36:23

您没有正确地将setTimeout包装到promise中。您的slowDouble不会返回任何内容。这就是你得到undefined的原因。您需要更改这段代码的编写方式,以便slowDouble函数返回一个promise,这样就可以去掉promisify函数。

不同之处在于,当您构造promise时,您需要能够从回调中为您试图包装的任何异步函数调用resolve回调。在setTimeout的情况下,我们需要从setTimeout的回调中调用resolve

function slowDouble(num) {
  return new Promise(resolve => {
    setTimeout(() => resolve(num * 2), 1000);
  });
}

async function promisifyTest(num) {
  const result = await slowDouble(num);
  console.log('Async result:', result);
}

console.log('Waiting...');
promisifyTest(4);

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52634278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档