javascript - 用于非异步的 Node JS

标签 javascript node.js

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

现在的问题是我正在使用 for 像这样遍历优惠对象

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

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

关于javascript - 用于非异步的 Node JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33906165/

相关文章:

javascript - 从请求 URL 中删除参数

javascript - Firefox localStorage 如何跨所有选项卡访问它?

javascript - react 元素宽度动画

javascript - jQuery 代码未使用 $(function(){...}); 运行;但没有它也会运行

node.js - 设置 mongojs 集合的写入关注

javascript - RxJS bufferWithCount() 不会因超时而暂停

javascript - Jquery移动表单数据在单个文件中的两个页面之间提交?

node.js - COR 错误 : Google Oauth from React to Express (PassportJs validation)

node.js - Express JS不渲染jade模板

node.js - 类型错误 : crypto. createPrivateKey 不是函数