我想顺序执行for循环中的函数。
我使用node.js,我的代码是......
var insertData = [];
var interval = 500;
function working1(nodeID, keyword, cb){
insertData.push(nodeID);
console.log('working: '+nodeID);
// get data and add value to insertData
}
function working2()
{
// insert insertData to database
}
function getDeviceValue(nodeID){
insertData.push(nodeID);
console.log('getDeviceValue : '+nodeID);
async.series([
function(calllback){
working1(nodeID, 'A', function(data, err){
if (err) console.log(err);
else calllback(null, data);
});
},
function(calllback){
working1(nodeID, 'B', function(data, err){
if (err) console.log(err);
else calllback(null, data);
});
},
], function(err, results){
working2();
});
}
setInterval(function() { // This should work periodically.
dbData = [];
for (var i=1; i<=4; i++)
getDeviceValue('0000'+i);
}, interval);
当我执行上面的代码时,它的工作方式就像......
getDeviceValue : 00001
getDeviceValue : 00002
getDeviceValue : 00003
getDeviceValue : 00004
working : 00001
working : 00002
working : 00003
working : 00004
但我想让它像...一样工作。
getDeviceValue : 00001
working : 00001
getDeviceValue : 00002
working : 00002
getDeviceValue : 00003
working : 00003
getDeviceValue : 00004
working : 00004
当我搜索它时,答案是&#39;使用promise&#39;。
我该如何使用它?
或
还有其他办法吗?
答案 0 :(得分:0)
没有承诺的解决方案,使用简单的javascript。
var i = 1;
var interval = 500;
var insertData = [];
function working(nodeID){
insertData.push(nodeID);
console.log('working: '+nodeID);
}
function getDeviceValue(nodeID){
insertData.push(nodeID);
console.log('getDeviceValue : '+nodeID);
working(nodeID);// Changed
}
function asyncLoop(index)
{
if(index > 4) return;
setTimeout(function() {
getDeviceValue('0000'+index);
index++;
asyncLoop(index);
}, interval);
}
asyncLoop(i);
&#13;
答案 1 :(得分:0)
您可以将第一个console.log
放在async.series
内:
function getDeviceValue(nodeID){
insertData.push(nodeID);
async.series([
function(callback) {
console.log('getDeviceValue : '+nodeID);
callback();
},
function(calllback){
working1(nodeID, 'A', function(data, err){
if (err) console.log(err);
else calllback(null, data);
});
},
function(calllback){
working1(nodeID, 'B', function(data, err){
if (err) console.log(err);
else calllback(null, data);
});
},
], function(err, results){
working2();
});
}