如果一个函数返回一个Promise
并标记为async
,它是否返回Promise<Promise<DoWorkResponse>>
?
tslint
告诉我,我应该将函数标记为异步。我担心我正在以某种方式加倍地包装Lambda
客户端返回的承诺。
const doWork = async (event: MyEvent): Promise<DoWorkResponse> => {
return new Lambda({ region: process.env.region })
.invoke({
FunctionName: process.env.doWorkLambdaName,
InvocationType: 'RequestResponse',
LogType: 'Tail',
Payload: JSON.stringify(event),
})
.promise()
.then((response: Lambda.InvocationResponse) => {
if (response.StatusCode !== 200) {
const errorMessage = `Error occurred invoking DoWork Lambda. ${response}`;
console.error(errorMessage);
throw new Error(errorMessage);
}
return JSON.parse(response.Payload as string);
});
};
发布于 2019-01-10 17:46:02
它是返回
Promise<Promise<DoWorkResponse>>
吗?
不,一个承诺永远不会承诺。如果它获得了带有承诺的resolve()
d,则承诺将解析为允诺值,在从异步函数返回时也会发生同样的情况。但是,您实际上可以在这里使用await
来稍微简化代码:
async function doWork (event: MyEvent): Promise<DoWorkResponse> {
const response = await new Lambda({ region: process.env.region })
.invoke({
FunctionName: process.env.doWorkLambdaName,
InvocationType: 'RequestResponse',
LogType: 'Tail',
Payload: JSON.stringify(event),
})
.promise();
if (response.StatusCode !== 200) {
const errorMessage = `Error occurred invoking DoWork Lambda. ${response}`;
console.error(errorMessage);
throw new Error(errorMessage);
}
return JSON.parse(response.Payload as string);
}
发布于 2019-01-10 17:36:28
好的,实际上异步函数将返回值转换为允诺,如果重发的值还不是承诺的话。如果它已经是一个承诺,它将得到回报,不会改变
https://stackoverflow.com/questions/54134070
复制相似问题