【发布时间】:2021-06-24 11:56:15
【问题描述】:
我有一个 async 函数来检查订单的状态 (checkOrderStatus())。我想重复这个函数,直到它返回"FILLED" 或"CANCELED",然后在另一个函数中使用这个返回值来决定是继续还是停止代码。每个订单在成为"FILLED" 或"CANCELED" 之前都会经历不同的状态,因此需要重复checkOrderStatus() 函数(这是一个API 调用)。
我现在拥有的是这个,重复 checkOrderStatus() 函数:
const watch = filter => {
return new Promise(callback => {
const interval = setInterval(async () => {
if (!(await filter())) return;
clearInterval(interval);
callback();
}, 1000);
});
};
const watchFill = (asset, orderId) => {
return watch(async () => {
const { status } = await checkOrderStatus(asset, orderId);
console.log(`Order status: ${status}`);
if (status === 'CANCELED') return false;
return status === 'FILLED';
});
};
然后我从另一个函数调用watchFill(),我想检查它的返回值(true 或false)如果true 则继续代码,如果false 则停止代码:
const sellOrder = async (asset, orderId) => {
try {
const orderIsFilled = await watchFill(asset, orderId);
if (orderIsFilled) {
//… Continue the code (status === 'FILLED'), calling other async functions …
}
else {
//… Stop the code
return false;
}
}
catch (err) {
console.error('Err sellIfFilled() :', err);
}
};
但是,这不起作用。我可以通过watchFill() 中的console.log 看到终端中正在更新的状态,但它永远不会停止,最重要的是,sellOrder() 中的orderIsFilled 变量中的值不会更新,无论返回的值是什么watchFill() 变为。
我怎样才能达到预期的行为?
【问题讨论】:
-
@ggorlen 谢谢重新打开
-
@AjayChambers 这个问题没有像这篇文章那样延迟/等待。
标签: javascript node.js async-await promise