2014-02-12 64 views
17

我從這段代碼的承諾數組:element.all(by.repeater('unit in units')),並且我發現這真的是難以獲取數據到另一個數組:量角器 - 如何獲得承諾數組的結果到另一個陣列

element.all(by.repeater('unit in units')).then(function (arr) { 
    var items = []; 

    for (var i = 0; i < arr.length; i++) { 
     arr[i].getText().then(function(text) { 
     items.push(text); 
     }); 
    } 

    //PROBLEM ITEMS is Empty 
    console.log(items); 
}); 

回答

7

用品質

var Q = require('q'); 

element.all(by.repeater('unit in units')).then(function (arr) { 
    var promises = []; 
    for (var i = 0; i < arr.length; i++) { 
     promises.push(arr[i].getText()); 
    } 

    Q.all(promises).done(function (result) { 
     // print the results when the lookups and processing are done     
     console.log(result.length); 
     console.log(result);     
    }); 
}); 
+0

感謝您分享答案,但請問Q是什麼? :) – glepretre

+0

在JavaScript中製作和編寫異步承諾的工具 http://documentup.com/kriskowal/q/ – Acosta

+0

您需要在應用程序存儲庫中安裝包含「npm install q --save-dev」的q – ebuprofen

33

管理工作再上一個簡單的方法使用Q和中繼器避免了相同的結果修正。使用內置的地圖可以做到這一點。

var tabs = element.all(by.css('.unitTabs li a')).map(function (elm) { 
    return elm.getText(); 
}); 

tabs.then(function (result) { 
    var sorted = _.sortBy(result, function (name) { return name; }); 
    for (var i = 0; i < result.length; i++) { 
     expect(result[i]).toBe(sorted[i]); 
    } 
}); 
+3

我很高興有人使用我的地圖實現! –

+1

感謝Andres,非常方便的util,你有什麼樣的博客/ wiki我們可以看到關於這種請求的更多細節?我之所以會問,是因爲我發現它掛在網上而不是正確的文檔上 – Acosta

+0

剛剛過完我的一天,謝謝! – alecxe

2

NPM Q是要做然後使用requirejs在你的腳本的頂部像

 var Q = require('q'); 

     element.all(by.repeater('object in objects')).then(function (arr) { 
      var promises = []; 
      for (var i = 0; i < arr.length; i++) { 
       promises.push(arr[i].getText()); 
      } 

      Q.all(promises).done(function (result) { 
       // print the results when the lookups and processing are done 
       console.log(result.length); 
       console.log(result); 
      }); 
     }); 

順便說一句,我認爲我的第二個選擇是清潔的第一件事。