2016-11-16 96 views
0

如果我对async.map进行了一系列调用,结果是否保证了顺序?或者结果只是请求完成的顺序?例如async.map保证结果是按顺序传递的吗?

var requestList = [ 
    { method: 'GET', url: '/something1' }, 
    { method: 'GET', url: '/something2' }, 
    { method: 'GET', url: '/something3' }]; 

// async map the requests together, and handle the result in 
// the callback. 
async.map(requestList, function(obj, callback) { 
    request(obj, function(error, response, body) { 
     if(!error && response.statusCode == 200) { 
      var body = JSON.parse(body); 
      callback(null, body); 
     } else { 
      callback(error || response.statusCode); 
     } 
    }); 
}, function(err, result) { 
    if(err) { 
     console.log('Error!'); 
    } else { 
     // is result guarenteed to be in the order: [/something1, /something2, /something3] ? 
    } 
}); 
+1

是的,顺序是迭代器和数组的保证。尝试保持对象键的顺序 – megawac

回答

0

如果它传递了一个数组,我认为它总是按顺序排列的。 并根据官方文档 '如果map传递一个Object,结果将是一个Array。结果大致将按照原始对象的按键顺序排列(但这可能因JavaScript引擎而异)'。 该文档没有提及数组,因此可以安全地假定该订单将被保留。