Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 向Typescript中的同步函数添加超时_Node.js_Typescript_Promise_Google Cloud Functions_Synchronous - Fatal编程技术网

Node.js 向Typescript中的同步函数添加超时

Node.js 向Typescript中的同步函数添加超时,node.js,typescript,promise,google-cloud-functions,synchronous,Node.js,Typescript,Promise,Google Cloud Functions,Synchronous,我正在使用第三方库进行大量计算。问题是它挂起了一些输入。我想给同步操作添加超时。我的代码在GCP(云功能)上的单线程节点环境中运行 这是我已经尝试过的: let calculation = new Promise((resolve, reject) => { const result = calculate(x, y) resolve(result) }) let timeout = new Promise((resolve, reject) => { let

我正在使用第三方库进行大量计算。问题是它挂起了一些输入。我想给同步操作添加超时。我的代码在GCP(云功能)上的单线程节点环境中运行

这是我已经尝试过的:

let calculation = new Promise((resolve, reject) => {
   const result = calculate(x, y)
   resolve(result)
 })

let timeout = new Promise((resolve, reject) => {
   let id = setTimeout(() => {
     clearTimeout(id);
     reject()
   }, 5000)
 })

const result = await Promise.race([timeout, calculation])

不幸的是,它不起作用,因为
calculate
方法锁定线程,因此超时不能拒绝承诺。是否可以在给定时间后使同步方法超时

将处理移动到其他线程,然后查看线程是否及时完成。这是否回答了您的问题@CameronLittle这没有帮助,因为无限循环的方法来自第三方库。我无法改变它的内部结构。@CertainPerformance它在单线程环境中的节点上运行(来自GCP平台的云函数)。将该信息添加到问题中。如果您无法创建单独的处理环境,我认为不使用昂贵的计算代码并将其错开是不可能的。请将处理移动到另一个线程,然后查看线程是否及时完成。这是否回答了您的问题@CameronLittle这没有帮助,因为无限循环的方法来自第三方库。我无法改变它的内部结构。@CertainPerformance它在单线程环境中的节点上运行(来自GCP平台的云函数)。如果你无法创建一个单独的处理环境,我认为如果不使用昂贵的计算代码并将其错开是不可能的
let calculation = new Promise((resolve, reject) => {
   const result = calculate(x, y)
   resolve(result)
 })

let timeout = new Promise((resolve, reject) => {
   let id = setTimeout(() => {
     clearTimeout(id);
     reject()
   }, 5000)
 })

const result = await Promise.race([timeout, calculation])