次のコードはうまくいきます。しかし、関数の途中の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 for for regular forループをオブジェクトに置き換えます。
- 2. node.js - PHPを置き換え、非同期で接続する
- 3. c forループとcudaの置き換え
- 4. forループをリスト内包に置き換えます
- 5. Forループの非同期呼び出しのシーケンス - Javascript
- 6. SilverLight with SharePointの非同期コード
- 7. AppDomain.GetCurrentThreadId();を置き換えます。 with ManagedThreadId
- 8. 非同期読み込みjavascript with document.write
- 9. forループ内で文字列をregexprepに置き換える? (MATLAB)
- 10. ループ - 非同期イベント付き
- 11. forループ同期メソッド
- 12. 非同期/同期ループNode.js
- 13. 非同期操作を停止して置き換えを開始する
- 14. Javascript "\\"を "\"に置き換えます
- 15. javascriptをローカルファイルに置き換えます
- 16. double forループを置き換えて速度を上げる
- 17. 非同期ループ内の非同期メソッド
- 18. JavaScriptの非同期ループ処理
- 19. Forループを置き換えるカスタムLinq拡張子
- 20. Javaストリームは入れ子になったforループを置き換えます
- 21. javascript/google map api if文forループ内
- 22. forループwithループArrayList with
- 23. 非同期モジュールを使用してforループを含むnodeJSの同期実行?
- 24. 非同期NSURLConnection with NSOperation
- 25. Node.js - ループ非同期
- 26. C++非同期ループ
- 27. JavaScriptコードの設計非同期/コールバック
- 28. 非効率なJavascriptをJQueryに置き換えて言語エラー
- 29. Javascript Regexを置き換えます
- 30. javascriptの/¥withと置き換える方法
約束は非同期である...あなたはすでにのawait /非同期を使用しているので、それはあなたが変更したいということではありませんasync/await ...を使用するコード...私の人生のためにあなたが何をしたいかを推測することはできません –
'elements [i] .getAttribute(" value ")。 !私はそれを 'elements'としています** DOM要素の配列ではありません –
@JaromandaXコードはセレンコードですが、私はそれについて何も知らないのですが、実際には' elements'はWebAPIの 'Element'です。このメソッドがPromiseを返す場所はどこにもありませんが... – Kaiido