2017-03-14 21 views
0

配列に値を追加しようとしています。問題は、私は約束の中の値だけを得ることができるということです。私は配列内の値を割り当てようとしましたが、配列を使用しようとすると、最後に割り当てられた値が最後に割り当てられた値になります。プロミス内の値を分度器の配列に追加するにはどうすればよいですか?

値は、別の配列の値に基づいてページから取得されます。だから、例えば:私も値を返す試みた

var array1 = ['1','2','3']; 
var array2 = []; 

for (i=1;i<array1.length;i++) { 
    element(By.xpath(`//div/table/tbody/tr[1]/td[${array1[i]}]`)).getText().then(function(elemText){ 
     array2[i] = elemText; 
    }) 
} 

var array1 = ['1','2','3']; 
var array2 = []; 

for (i=1;i<array1.length;i++) { 
    array2[i] = element(By.xpath(`//div/table/tbody/tr[1]/td[${array1[i]}]`)).getText().then(function(elemText){ 
     return elemText; 
    }) 
} 

しかし、私が得たすべてはpromises..whichの配列である、私の場合、私はで動作することはできません私は値を文字列の値を扱う別のメソッドに渡し、約束は渡さないからです。私はそれが約束を処理できることを知っていますが、他の方法はありませんか?それとも、私は何かが足りないのですか?

答えて

1

私はそのようなような約束に各配列要素をマッピングします:あなたは反復変数iはグローバルオブジェクトに入れ、すべての

var array1 = ['1','2','3']; 

var promises = array1.map(function(i) { 
    return element(By.xpath(`//div/table/tbody/tr[1]/td[${i}]`)).getText(); 
}); 

Promise.all(promises).then(function(result) { 
    // result is your new array here 
}); 
+0

ええ、私は約束と一緒に働くことができますが、実際には約束どおりに価値を得る方法があるとは思っていませんでした。 – becixb

0

まず。 letキーワードを使用:

for (let i=1;i<array1.length;i++) 

なぜ1から始めるのですか? array1の第1要素をスキップしますか? 0から始まり、例としてletを使用すると、問題が解決します。最初に実行されるスタックのforループを実行します。 forループの各繰り返しは、コールバックキューにコールバックを置きます。ループが終了すると、グローバルオブジェクトにi = 3となります。そして、3つのコールバックはすべてこの正確な3で動作します。 'let'は中括弧でのみ動作し、各コールバックで閉じるようにします。

+0

ええ、それは残念ながら0から始めるはずです。とにかく私はあなたの答えを理解していない。私はとにかくそれを試してみると、それが動作する場合あなたに通知します。 – becixb

関連する問題