如何通过异步方法返回承诺?

时间:2019-08-30 08:50:58

标签: typescript asynchronous

我正在处理一个调用异步函数的代码。在这种情况下,run方法对返回字符串的方法执行await调用。如何转换run方法以再次返回承诺?

我搜索了Internet,但是找不到解决方案。我是Typescript和异步编程的新手。

我还想问:await关键字是否将字符串中返回的诺言“转换”?结果是一个字符串,但是为什么我不必用.then()对其进行拆包以获得字符串?如果结果是一个承诺,我可以通过run方法将其返回,但是run必须返回一个承诺。

public async run(): Promise<IMyType> {
    log.info("Running item1 ...");

    let result: IMyType = {
        name: "name1",
        outcome: undefined,
        message: "",
        various: {}
    };

    result = await this.runCheck(result);
    if (result.outcome) {
        result.message = this.successMessage;
    } else {
        result.message = this.failMessage;
    }

    return result;
}


private async runCheck(
    result: IMyType
): Promise<IMyTypet>

2 个答案:

答案 0 :(得分:1)

您的代码中已有答案。 当您使用async标记函数时,意味着无论函数内部是什么,它都会返回一个Promise。如果您返回一个值,那么它将是诺言所解决的值。

runCheck()被标记为async,您正在await对其进行操作以获取字符串值。 run()函数也是如此。您已经用async标记了它,这意味着无论里面有什么,它都会返回一个承诺。您将返回字符串值,这意味着您可以执行以下操作:

const theString = await object.run(); // theString is the value you return in function

答案 1 :(得分:0)

这是如何在异步函数中返回承诺的方法:

let getSomeValue = async () : Promise<string> => {
    let promise: Promise<number> = new Promise((resolve, reject) => {
        setTimeout(function() { resolve("my result") }, 50); //for example
    });
    return promise;
}

然后您可以像这样食用它:

let result = await getSomeValue();

和您的问题:

  

“ await关键字是否将字符串中返回的诺言“转换”?”

是的,“我的结果”将分配给此处的结果。

相关问题