应用程序在NodeJs中运行,我们使用Promise.race()来超时主要的承诺,如代码所示(这里,“mainPromise”是测试的通用承诺)。
const promiseTimeout = new Promise((resolve, _) => {
setTimeout(() => {
resolve('promise Timeout');
}, 20000);
});
const mainPromise = new Promise((resolve, _) => {
setTimeout(() => {
resolve('Main promise finished');
}, 21000);
});
export const triggerVerifySls = async (event: any, context: any) => {
context.callbackWaitsForEmptyEventLoop = false;
const triggerStatus = await Promise.race([mainPromise, promiseTimeout]);
const response = {
statusCode: 200,
body: JSON.stringify(triggerStatus),
};
return response;
};当我们部署和调用函数时,它第一次工作,但在其他调用中,Promise.race返回数组中第一个承诺的响应。
输出与Promise.race(mainPromise,promiseTimeout)
$ Serverless reponse: promise Timeout
$ Serverless reponse: Main promise finished
$ Serverless reponse: Main promise finished
$ Serverless reponse: Main promise finishedPromise.race输出(promiseTimeout,mainPromise)
$ Serverless reponse: promise Timeout
$ Serverless reponse: promise Timeout
$ Serverless reponse: promise Timeout
$ Serverless reponse: promise Timeout函数似乎缓存了响应,因为它在第一次调用:屏幕截图之后没有等待20秒。
SERVERLESS.YML
frameworkVersion: '2'
provider:
name: aws
runtime: nodejs14.x
memorySize: 2052
timeout: 30
region: us-east-1
functions:
triggerVerifySls:
handler: src/serverless/triggerVerifySls.triggerVerifySls
events:
- http:
path: triggerVerifySls
method: post发布于 2021-08-13 23:17:00
是的,就像评论说的,让你的假承诺代替康斯特的承诺:
const promiseTimeout = () => new Promise((resolve, _) => {
setTimeout(() => {
resolve('promise Timeout');
}, 20000);
});
const mainPromise = () => new Promise((resolve, _) => {
setTimeout(() => {
resolve('Main promise finished');
}, 21000);
});那就这样说吧:
const triggerStatus = await Promise.race([mainPromise(), promiseTimeout()]);
...https://stackoverflow.com/questions/68777034
复制相似问题