Node.js 向Typescript中的同步函数添加超时
我正在使用第三方库进行大量计算。问题是它挂起了一些输入。我想给同步操作添加超时。我的代码在GCP(云功能)上的单线程节点环境中运行 这是我已经尝试过的: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
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])