我想每秒发一次http请求,直到返回一个特定的结果然后停止

时间:2018-02-03 01:37:32

标签: javascript node.js

我首先尝试使用回调(很高兴在请求时发布此代码),但是当我运行它时,什么都不会发生。所以我现在试图接受承诺(我不是很熟悉),但又有同样的问题,没有任何反应。

有人可以告诉我哪里出错吗?

我觉得这可能与异步有关,但我认为使用诺言会解决这个问题?

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();
}

1 个答案:

答案 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;
&#13;
&#13;

在此代码中,requestAndWait方法启动1秒计时器,但无需等待它完成发送请求。当请求返回时,我们检查它是否成功。如果是这样,我们就完成了,我们忽略了计时器。如果不成功,我们确保计时器已完成(如果请求花费的时间超过一秒,可能会立即执行,或者如果请求速度很快,则可能需要一些时间),然后再次调用requestAndWait重启。

如果您只是想在接收一个响应和发送下一个请求之间等待一秒钟,则只需要在收到响应之前不要启动计时器。