2014-08-28 108 views
0

我想使用Q.all()返回一個promise數組; 這樣的:Q.js Q.all()當promise的數組長度不確定時

return Q.all([ 
       list[0].getCssValue('height'), 
       list[1].getCssValue('height'), 
       ..., 
       list[list.length-1] 
       .getCssValue('height') 
      ]); 

我需要返回陣列中的所有名單,我可以通過array.length得到的長度。

的問題是,我不能

for(var i = 0; i < list.length; i++) 

做出回報的項目,如

list[i].getCssValue('height'); 

那麼應該怎麼辦呢?

+0

注意'Q.all'將給出一個數組的承諾,而不是承諾數組。 – Bergi 2014-08-28 08:51:28

+0

您的'getCssValue'函數是否爲單個值返回承諾?你能發佈它的代碼嗎? – Bergi 2014-08-28 08:52:54

回答

0

好了,你居然可以通過創建一個新的數組做到這一點:

var arr = [] 
for(var i = 0; i < list.length; i++){ 
    arr.push(list[i].getCssValue('height'); 
} 
return Q.all(arr); // wait for all getCssValue actions 

然而,與.map每個元素從一個陣列到另一個映射一個更優雅的方式:

return Q.all(arr.map(function(x){ return x.getCssValue('height'); });