首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接异步函数?

链接异步函数?
EN

Stack Overflow用户
提问于 2016-10-17 14:21:50
回答 2查看 1K关注 0票数 4
代码语言:javascript
复制
let val = 0;

async function first() {
    console.log('1a', val);
    second();
    console.log('1b', val);
}

async function second() {
    console.log('2a', val);
    third();
    console.log('2b', val);
}

async function third() {
    console.log('3a', val);
    val = await new Promise(function (resolve, reject) {
        setTimeout(function () {
            resolve(3);
        }, 1000);
    });
    console.log('3b', val);
}

console.log('0a', val);
first();
console.log('0b', val);

我期待:

代码语言:javascript
复制
0a 0
1a 0
2a 0
3a 0
3b 3
2b 3
1b 3
0b 3

但我收到了:

代码语言:javascript
复制
0a 0
1a 0
2a 0
3a 0
2b 0
1b 0
0b 0
3b 3

我猜想异步有一个基本的东西是我不知道的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-17 14:29:35

你需要用

代码语言:javascript
复制
async function first() {
    console.log('1a', val);
    await second();
//  ^^^^^
    console.log('1b', val);
}

async function second() {
    console.log('2a', val);
    await third();
//  ^^^^^
    console.log('2b', val);
}

在异步执行被调用的函数之后链接b日志。

也是一样的

代码语言:javascript
复制
console.log('0a', val);
first();
console.log('0b', val);

只是您不能在这里使用await,因为您不在aync function中。创建一个函数async并不意味着它神奇地阻塞了所有异步的东西,相反,它的结果变成了总是异步的承诺,您可以使用await关键字。因此,要让0b等待,您可以使用

代码语言:javascript
复制
console.log('0a', val);
first().then(function() {
    console.log('0b', val);
}, function(err) {
    console.error(err);
});

代码语言:javascript
复制
(async function() {
    try {
        console.log('0a', val);
        first();
        console.log('0b', val);
    } catch(err) {
        console.log(err);
    }
}());
票数 3
EN

Stack Overflow用户

发布于 2016-10-17 14:28:02

您必须await所有异步函数调用:

代码语言:javascript
复制
async function first() {
    console.log('1a', val);
    await second();
    console.log('1b', val);
}

async function second() {
    console.log('2a', val);
    await third();
    console.log('2b', val);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40088917

复制
相关文章

相似问题

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