我首先尝试使用回调(很高兴在请求时发布此代码),但是当我运行它时,什么都不会发生。所以我现在试图接受承诺(我不是很熟悉),但又有同样的问题,没有任何反应。
有人可以告诉我哪里出错吗?
我觉得这可能与异步有关,但我认为使用诺言会解决这个问题?
let btcmOrderStatus = undefined;
let orderGuid = 987654321;
//Promise Part One
function getOrderStatus()
{
return new Promise(resolve =>
{
client.getOrderDetail([orderGuid], function(err, data)
{
tempOrderStatus = data.orders[0].status;
resolve(tempOrderStatus);
});
});
}
//Promise Part Two
async function primeFunction()
{
var btcmOrderStatus;
btcmOrderStatus = await getOrderStatus();
console.log("Status : " + btcmOrderStatus);
}
while (btcmOrderStatus != "Cancelled") {
primeFunction();
}
答案 0 :(得分:0)
我注意到在您的代码中,您实际上没有任何1秒的延迟。你可能想在primeFunction
中找到一个?
以下是一种方法:
function makeRequest() {
// Pretend we're doing a request by waiting a random time up to 2 seconds,
// and return true (for success) 30% of the time
return new Promise((resolve) => {
setTimeout(() => {
console.log("Response received");
resolve(Math.random() < 0.3);
}, Math.random() * 2e3);
});
}
function wait1Second() {
// Wait one second, then resolve the promise
return new Promise((resolve) => {
setTimeout(resolve, 1e3);
});
}
let count = 0;
function requestAndWait() {
count++;
const timer = wait1Second();
makeRequest()
.then((success) => {
if (success) {
console.log(count, "success; stop");
} else {
console.log(count, "not success");
timer.then(requestAndWait);
}
});
}
requestAndWait();
&#13;
在此代码中,requestAndWait
方法启动1秒计时器,但无需等待它完成发送请求。当请求返回时,我们检查它是否成功。如果是这样,我们就完成了,我们忽略了计时器。如果不成功,我们确保计时器已完成(如果请求花费的时间超过一秒,可能会立即执行,或者如果请求速度很快,则可能需要一些时间),然后再次调用requestAndWait
重启。
如果您只是想在接收一个响应和发送下一个请求之间等待一秒钟,则只需要在收到响应之前不要启动计时器。