検索

ホームページ  >  に質問  >  本文

node.js - ノードをクローラーとして使用し、ループでデータを取得するインターフェイスをシミュレートします。async/await はどのようにして同期操作を実現し、プロセスを制御できますか?

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

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

リーリー

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

给我你的怀抱给我你的怀抱2703日前1660

全員に返信(4)返信します

  • 天蓬老师

    天蓬老师2017-07-06 10:38:31

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

    返事
    0
  • 仅有的幸福

    仅有的幸福2017-07-06 10:38:31

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

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

    リーリー

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

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

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

    返事
    0
  • 習慣沉默

    習慣沉默2017-07-06 10:38:31

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

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

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

    リーリー

    返事
    0
  • 怪我咯

    怪我咯2017-07-06 10:38:31

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

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

    リーリー

    返事
    0
  • キャンセル返事