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

Asynchronous 如何在typescript中从异步返回到正常执行,asynchronous,typescript,promise,return,async-await,Asynchronous,Typescript,Promise,Return,Async Await,在TypeScript中,为了解析承诺,我使用wait关键字。 但是该关键字只允许存在于异步函数体中,异步函数体返回Promise。 在这种情况下,调用此异步函数的函数将需要解析返回值:Promise,这意味着我将再次需要wait关键字,并且该函数也必须定义为async 我错过了什么?你不必等待,你可以在承诺上使用它。 以下是您描述的场景: async function fn(): Promise<number> { return new Promise<number&

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

我错过了什么?

你不必等待,你可以在承诺上使用它。 以下是您描述的场景:

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);
将记录以下内容:

承诺{[[PromiseStatus]]:待定,[[PromiseValue]]:未定义}

要获得需要使用的值,请执行以下操作:

x.then(num => console.log(num));
如果不使用wait,则无法将异步操作的结果赋给变量。

您不必等待,您可以在promise上使用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);
将记录以下内容:

承诺{[[PromiseStatus]]:待定,[[PromiseValue]]:未定义}

要获得需要使用的值,请执行以下操作:

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

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

我将wait理解为:等待promise解决或出现错误,然后展开对象以获取值。总之,您不能。一旦异步,总是异步的。可能重复的我理解为等待:等待,直到承诺解决或错误,并展开对象以获得值。总之,你不能。一旦异步,总是异步的。如果我从then子句返回,那么这是返回的值,还是存储在主体内的变量中,则可能重复?var x=fn2num.thennum=>{return num*2}这是赋值还是返回?检查我修改过的答案如果我从then子句返回,这是返回值,还是存储在正文中的变量中?var x=fn2num.thennum=>{return num*2}这会分配x还是返回?检查我修改过的答案