首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >异步/等待工作是如何工作的,为什么它在这里不起作用

异步/等待工作是如何工作的,为什么它在这里不起作用
EN

Stack Overflow用户
提问于 2019-01-04 04:12:53
回答 4查看 131关注 0票数 1

我一直在试图理解异步/等待是如何工作的,我想要做的就是让它等到值被返回。但是,我无法通过回调、承诺或async/await来实现这一点。我做错了什么,为什么async/await不像我期望的那样工作呢?(等待运行其他代码,直到这个承诺得到解决)

许多问题,如这一个链接到“介绍页”。我都读过了,我明白他们是做什么的,我只是不知道如何把它们写好,因为我相信我做的一切都是正确的,我只是遗漏了一些console.log("xcdcxcxcxccxvccvffdgfcd")

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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被返回,但是它似乎不起作用。为什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-01-04 04:17:33

异步/等待与返回承诺的函数一起工作。您的otherthing函数不返回任何内容。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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)
        });
    }

票数 4
EN

Stack Overflow用户

发布于 2019-01-04 04:17:11

您必须从return函数中获取new Promise,而不是从setTimeout回调。您应该构建承诺,在其执行器回调中启动异步操作(setTimeout),然后异步地启动resolve()reject()承诺。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function otherthing() {
  return new Promise((resolve, reject) => {
    setTimeout(function(){
      let f = "rerewwqfewfasgsadf"
      resolve(f);
    }, 3000);
  });
}

这里不需要任何async/await,因为函数本质上只是setTimeout的一个承诺包装器。另见How do I convert an existing callback API to promises?

票数 3
EN

Stack Overflow用户

发布于 2019-01-04 04:16:36

你应该把setTimeout移动到Promise体内,然后做resolve(f)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function otherthing() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            let f = "rerewwqfewfasgsadf"
            resolve(f);
         }, 3000);
    });
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54038764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文