我正在处理一个调用异步函数的代码。在这种情况下,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>
答案 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关键字是否将字符串中返回的诺言“转换”?”
是的,“我的结果”将分配给此处的结果。