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