現在のアイデアは次のとおりです。 1. カテゴリの下にあるすべてのタグ ページ URL を取得します。 2. クロール ページをループして現在のタグ ページを取得し、JSON API アドレスを取得します。 3. 現在のタグ ページの製品リストを取得します。タグ、4. Grab 現在のレーベルのページにロードされている製品を取得します。
しかし、私たちが今行ったことは、2 番目のステップの開始時に、2-4 が完了するまで待たずに次のステップにループするということです。async/await を使用しようとしましたが、プロセス制御は使用できませんでした。実装されました。ここでアドバイスを求めています。
リーリー次に、結果の図とコードの実行シーケンスを示します:
仅有的幸福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()
を入れるだけです。
習慣沉默2017-07-06 10:38:31
一般的に、人々は他人のビジネス ロジックを読む忍耐力がありません。
前述したように、Async/await は Promise に基づいています。呼び出したサードパーティ ライブラリの API インターフェイスが Promise オブジェクトを返さない場合、Async/await を使用したい場合は、次の場所で新しい Promise オブジェクトを作成する必要があります。もちろん、これを記述するのは非常に面倒ですが、Promise オブジェクトを返すことができれば非常に便利です。
以下は、参考のために、Promise なしのノードコアモジュールイベントを使用して書かれています:
リーリー怪我咯2017-07-06 10:38:31
Node8を使用できますutil.promisify
、Bluebird などでは、Node コールバック形式の関数を Promise 形式の関数に変更すると、async/await
を使用してコードを記述することができます。
コード自体は依然として非同期呼び出しですが、メソッドの記述は同期しているように見えます。したがって、記述するとき、特にループを記述するときは、プロセスの構造に注意を払う必要があります。コードが長すぎるので、説明するために小さな例を書きました
リーリー