节点JS用于NOT异步

Node JS for NOT asynchronous

本文关键字:异步 NOT 用于 JS 节点      更新时间:2023-09-26

我已经构建了我的第一个Node应用程序。它会收到一份报价清单,然后我必须收到报价中每件商品的价格。

现在的问题是,我正在使用for来遍历offers对象,比如

for(var k = 0; k < offers_object.length; k++){
   offer = offers_object[k];
   logger.info('Time Loaded is '+Math.floor(new Date() / 1000));
   ....
   some stuff...
   ....
   logger.info('Time request is '+Math.floor(new Date() / 1000));
   ....
   send request
   ....
   some more stuff after the requst
}

现在的问题是,在for循环中需要做的任何事情似乎都不是同步运行的。我使用API请求商品价格,这限制了我每秒8次请求。

我从计时器上得到的是:

info: Time Loaded is 1448409307
info: Time Loaded is 1448409307
info: Time Loaded is 1448409307
info: Time Loaded is 1448409307
info: Time Loaded is 1448409307
info: Time Loaded is 1448409307
info: Time Loaded is 1448409307
info: Time request is 1448409308
info: Time request is 1448409308
info: Time request is 1448409308
info: Time request is 1448409308
info: Time request is 1448409308
info: Time request is 1448409308
info: Time request is 1448409309

因此,基本上,您每秒只需要查询API 8次。为了实现这一点,你可以循环你的项目,并使用setTimeout在每1/8秒发出一个请求:

var delay = 1000 / 8;
objects.forEach(function(val, index) {
    setTimeout(function() {
        doSomething(index, val);
    }, index * delay);
});

保持异步对于性能和反应性非常重要。它不应该阻止你做任何事情。