繁体   English   中英

异步/等待如何工作,为什么在这里不工作

[英]How does Async/await work and why does it not work here

我一直在尝试了解异步/等待的工作方式,我要做的就是让它等待直到返回值。 但是,我无法通过回调,promise或async/await做到这一点。 我在做什么错,为什么async/await无法正常工作? (等待运行其他代码,直到此承诺得到解决)

像这样的许多问题都链接到“介绍页面”。 我已经阅读了所有内容,我了解它们的工作方式,我只是不知道如何正确地将它们写出,因为我相信我所做的一切正确,我只是缺少了一些console.log("xcdcxcxcxccxvccvffdgfcd")

 thing(); async function thing() { let c = await otherthing(); console.log("dfasfadsfdasasdfa" + c) } async function otherthing() { await setTimeout(function() { return new Promise((resolve, reject) => { let f = "rerewwqfewfasgsadf" return resolve(f); }) }, 3000); } 

应该将console.log等待到返回承诺值c为止,但是,它似乎不起作用。 为什么?

异步/等待与返回承诺的函数一起使用。 您的otherthing功能不返回任何内容。

您可以通过返回实例化的承诺来修复代码,如下所示:

  thing(); async function thing() { let c = await otherthing(); console.log("dfasfadsfdasasdfa" + c) } function otherthing() { return new Promise((resolve, reject) => { setTimeout(function () { let f = "rerewwqfewfasgsadf" resolve(f); }, 3000) }); } 

您必须从otherthing功能(而不是从setTimeout回调) return new Promise 您应该构造诺言,在其执行器回调中启动异步操作( setTimeout ),然后异步实现诺言resolve()reject()

function otherthing() {
  return new Promise((resolve, reject) => {
    setTimeout(function(){
      let f = "rerewwqfewfasgsadf"
      resolve(f);
    }, 3000);
  });
}

您不需要await这里进行任何async / await ,该函数本质上只是setTimeout周围的一个Promise包装器。 另请参见如何将现有的回调API转换为Promise?

您应该在Promise主体内移动setTimeout然后执行resolve(f)

function otherthing() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            let f = "rerewwqfewfasgsadf"
            resolve(f);
         }, 3000);
    });
}

async function otherthing没有return语句,因此它将始终返回解析为undefined的promise。

await setTimeout(...)没有任何意义。 您只能await一个承诺,而setTimeout不会返回一个承诺。


您需要明确地:

  • 创建一个new Promise()otherthing
  • 将您传递给setTimeout的回调函数中的resolve()具有所需的值
  • return从承诺otherthing

不要在传递给setTimeout的回调函数中创建promise。 那里没有意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM