如何在typescript中从异步返回到正常执行

时间:2016-12-18 10:57:54

标签: asynchronous typescript promise return async-await

TypeScript中,为了解决承诺,我使用了await关键字。 但该关键字只允许存在于async functions的正文中,并返回Promise<T>。 在这种情况下,调用此async函数的函数将需要解析返回值:Promise<T>,这意味着我将再次需要await关键字,并且该函数也必须定义为异步。

我错过了什么?

1 个答案:

答案 0 :(得分:4)

您没有await,您可以在承诺上使用then 这是您描述的场景:

async function fn(): Promise<number> {
    return new Promise<number>((resolve, reject) => {
        setTimeout(resolve.bind(null, 2), 1500);
    });
}

async function fn2(num: number) {
    return await fn() * num;
}

function fn3(num: number) {
    fn2(num).then(num => {
        console.log(`returned number: ${num}`);
    })
}

fn3(10);

code in playground

1500毫秒之后输出:

  

返回的号码:20

修改

这样做:

var x = fn2(3).then(num => { return num * 2 });
console.log(x);

将记录类似:

  

承诺{[[PromiseStatus]]:“待定”,[[PromiseValue]]:undefined}

要获得您需要使用的值:

x.then(num => console.log(num));

如果不使用await,则无法将异步操作的结果分配给变量。