Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 非异步的节点JS_Javascript_Node.js - Fatal编程技术网

Javascript 非异步的节点JS

Javascript 非异步的节点JS,javascript,node.js,Javascript,Node.js,我已经构建了我的第一个节点应用程序。它收到一份报价单,然后我必须收到该报价单上每个项目的价格 现在的问题是,我正在使用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... ....

我已经构建了我的第一个节点应用程序。它收到一份报价单,然后我必须收到该报价单上每个项目的价格

现在的问题是,我正在使用
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
}

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

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

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

…一些东西…
很重要。你能填写它们吗?只需澄清你从API请求的商品价格存储在
提供对象中是否正确?嘿,几乎可以肯定Math.floor()和除以1000将消除差异。试着打印实际时间,精确到毫秒?嗯…这很简单<代码>logger.info('时间请求为'+Math.floor(新日期()/1000))位于稍后执行的回调中。for循环被强制完成。因此,在循环完成之前,回调永远无法运行。我已将其粘贴在这里编辑:更新-删除注释部分您是天才!!还有一件事,如果我将整个对象传递给函数,为什么我要将索引传递给函数?你不必,我只是说明你可以。
var delay = 1000 / 8;
objects.forEach(function(val, index) {
    setTimeout(function() {
        doSomething(index, val);
    }, index * delay);
});