首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Promise.race()在无服务器上的问题/错误(从以前的调用中加载缓存)

Promise.race()在无服务器上的问题/错误(从以前的调用中加载缓存)
EN

Stack Overflow用户
提问于 2021-08-13 18:40:46
回答 1查看 228关注 0票数 1

应用程序在NodeJs中运行,我们使用Promise.race()来超时主要的承诺,如代码所示(这里,“mainPromise”是测试的通用承诺)。

代码语言:javascript
复制
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)

代码语言:javascript
复制
$ Serverless reponse: promise Timeout
$ Serverless reponse: Main promise finished
$ Serverless reponse: Main promise finished
$ Serverless reponse: Main promise finished

Promise.race输出(promiseTimeout,mainPromise)

代码语言:javascript
复制
$ Serverless reponse: promise Timeout
$ Serverless reponse: promise Timeout
$ Serverless reponse: promise Timeout
$ Serverless reponse: promise Timeout

函数似乎缓存了响应,因为它在第一次调用:屏幕截图之后没有等待20秒。

  • 函数缓存响应吗?
  • 该函数支持Promise.race吗?

SERVERLESS.YML

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-13 23:17:00

是的,就像评论说的,让你的假承诺代替康斯特的承诺:

代码语言:javascript
复制
const promiseTimeout = () => new Promise((resolve, _) => {
  setTimeout(() => {
    resolve('promise Timeout');
  }, 20000);
});

const mainPromise = () => new Promise((resolve, _) => {
  setTimeout(() => {
    resolve('Main promise finished');
  }, 21000);
});

那就这样说吧:

代码语言:javascript
复制
const triggerStatus = await Promise.race([mainPromise(), promiseTimeout()]);
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68777034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档