我尝试使用NodeJS中的q模块在循环中识别已解析的promise。
var portscanner = require('portscanner');
var Q = require('q');
var portScan1 = function(ip) {
return portscanner.checkPortStatus(22, ip);
}
var portScan2 = function(ip) {
return portscanner.checkPortStatus(80, ip);
}
for(var i=1; i<=254; i++) {
var ip = '10.10.1.' + i;
Q.all([portScan1(ip), portScan2(ip)]).then(function(resolve) {
console.dir({ ip: ip, func1result: resolve[0], func2result: resolve[1] });
});
}
问题是变量 i 一直到99,直到第一个Q被解析。
{ ip: '10.10.1.254', func1result: 'open', func2result: 'closed' }
{ ip: '10.10.1.254', func1result: 'closed', func2result: 'closed' }
{ ip: '10.10.1.254', func1result: 'closed', func2result: 'open' }
{ ip: '10.10.1.254', func1result: 'closed', func2result: 'open' }
... (and so on)
如何解决此问题,以便为已解决的承诺识别 id ?
THX