node.js - ノードをクローラーとして使用し、ループでデータを取得するインターフェイスをシミュレートします。async/await はどのようにして同期操作を実現し、プロセスを制御できますか?
给我你的怀抱
给我你的怀抱 2017-07-06 10:36:31
0
4
1673

現在のアイデアは次のとおりです。 1. カテゴリの下にあるすべてのタグ ページ URL を取得します。 2. クロール ページをループして現在のタグ ページを取得し、JSON API アドレスを取得します。 3. 現在のタグ ページの製品リストを取得します。タグ、4. Grab 現在のレーベルのページにロードされている製品を取得します。

しかし、私たちが今行ったことは、2 番目のステップの開始時に、2-4 が完了するまで待たずに次のステップにループするということです。async/await を使用しようとしましたが、プロセス制御は使用できませんでした。実装されました。ここでアドバイスを求めています。

リーリー

次に、結果の図とコードの実行シーケンスを示します:

给我你的怀抱
给我你的怀抱

全員に返信(4)
Peter_Zhu

ジェネレーター
非同期
約束

いいねを押す +0
仅有的幸福

プロセス全体が非同期であり、同期の意味がわかりません。非同期とは何かを理解していない可能性があります。

Async/await は Promise に基づいており、Superagent 自体が Promise をサポートしています。async/await を直接使用できます。

リーリー

http://visionmedia.github.io/...

http://www.ruanyifeng.com/blo...

それなら、http.get() 换成 superagent.get()を入れるだけです。

いいねを押す +0
習慣沉默

一般的に、人々は他人のビジネス ロジックを読む忍耐力がありません。

前述したように、Async/await は Promise に基づいています。呼び出したサードパーティ ライブラリの API インターフェイスが Promise オブジェクトを返さない場合、Async/await を使用したい場合は、次の場所で新しい Promise オブジェクトを作成する必要があります。もちろん、これを記述するのは非常に面倒ですが、Promise オブジェクトを返すことができれば非常に便利です。

以下は、参考のために、Promise なしのノードコアモジュールイベントを使用して書かれています:

リーリー
いいねを押す +0
刘奇

Node8を使用できますutil.promisify 、Bluebird などでは、Node コールバック形式の関数を Promise 形式の関数に変更すると、async/await を使用してコードを記述することができます。

コード自体は依然として非同期呼び出しですが、メソッドの記述は同期しているように見えます。したがって、記述するとき、特にループを記述するときは、プロセスの構造に注意を払う必要があります。コードが長すぎるので、説明するために小さな例を書きました

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート