次のコードはうまくいきます。しかし、関数の途中のPromiseコード(コメントで示される)を非同期コードに変更し、forループをmap()に置き換えたいと思います。どうすればいい?プロミスコードを非同期コードに置き換えます。Forループwith JavaScript(map)(
2
A
答えて
1
、私がお勧めしたい:
// Start promise code
try {
for (let element of await driver.findElements(By.css('input'))){
console.log(await element.getAttribute("value"));
}
} catch (error) {
console.log(error);
}
これはループでlet
を使用して、async
/await
がうまく命令型プログラミングを取り戻し方法を示しています。
属性が順番にリストされている点が異なります(getAttribute
タイミングに依存しています)。スピードが重要な場合は、次のように秩序を維持しながら、
は、並行して属性を取得:
let elements = await driver.findElements(By.css('input'));
for (let val of await Promise.all(elements.map(e => e.getAttribute("value")))) {
console.log(val);
}
+0
CRiceとjibの両方が私の質問に正解をくれました。私は、私の複数のソリューションを与えるためのジブへの答えを与えているが、私はCRiceの答えをテストし、それもあまりにもうまくいくので、私はCRiceに親指を与えた。ありがとうございました! – irrational
2
私は、その約束しているコードの一部を機能的には異なるスタイルのコードに置き換えたいと思っていますか?もしそうなら、ここでそのコードがある(あいまい)二行に圧縮:
// Start promise code
const elements = await driver.findElements(By.css('input'));
await Promise.all(elements.map(ele => ele.getAttribute('value').then(console.log))).catch(console.log);
// End promise code
あなたが言及あなたが非同期で約束ベースのコードを交換したいこと/スタイルのコードを待ちます。私は非同期/待機が約束に基づいているので(それを避けているわけではないので)一般的にそれに対して(この場合、私はそれが役に立ったと思うが)注意が必要だ。約束を愛することを学び、本当にコードをきれいにする場合にのみasync/await構文を使用してください。あなたは、単にコンソールに情報をダンプしているので
関連する問題
- 1. for eachループfor非同期コード?
- 2. for for for regular forループをオブジェクトに置き換えます。
- 3. NodeJS forループを非同期にする
- 4. node.js - PHPを置き換え、非同期で接続する
- 5. c forループとcudaの置き換え
- 6. forループをリスト内包に置き換えます
- 7. Javascript/Node.js非同期ループ
- 8. JavaScriptの非同期ループ
- 9. HttpWebRequestを同期コードから非同期コードに変換する
- 10. (非同期機能付)forループため
- 11. Forループの非同期呼び出しのシーケンス - Javascript
- 12. 「非同期キーワード非同期」関数を「非同期キーワード非同期」関数に変換できますか?
- 13. SilverLight with SharePointの非同期コード
- 14. AppDomain.GetCurrentThreadId();を置き換えます。 with ManagedThreadId
- 15. 非同期読み込みjavascript with document.write
- 16. JavaScript:同期コードで非同期FileReaderを使用するには?
- 17. forループをapplyに置き換えよう
- 18. forループ内で文字列をregexprepに置き換える? (MATLAB)
- 19. Inner forループをJavaストリームに置き換える
- 20. 複数のforループをリストイテレータに置き換える
- 21. ループ - 非同期イベント付き
- 22. 非同期/同期ループNode.js
- 23. javascriptをローカルファイルに置き換えます
- 24. Javascript "\\"を "\"に置き換えます
- 25. forループ同期メソッド
- 26. 非同期操作を停止して置き換えを開始する
- 27. 非同期ループ内の非同期メソッド
- 28. JavaScriptの非同期ループ処理
- 29. double forループを置き換えて速度を上げる
- 30. forループでx回ずつ非同期で実行します。
約束は非同期である...あなたはすでにのawait /非同期を使用しているので、それはあなたが変更したいということではありませんasync/await ...を使用するコード...私の人生のためにあなたが何をしたいかを推測することはできません –
'elements [i] .getAttribute(" value ")。 !私はそれを 'elements'としています** DOM要素の配列ではありません –
@JaromandaXコードはセレンコードですが、私はそれについて何も知らないのですが、実際には' elements'はWebAPIの 'Element'です。このメソッドがPromiseを返す場所はどこにもありませんが... – Kaiido