現在のアイデアは次のとおりです。 1. カテゴリの下にあるすべてのタグ ページ URL を取得します。 2. クロール ページをループして現在のタグ ページを取得し、JSON API アドレスを取得します。 3. 現在のタグ ページの製品リストを取得します。タグ、4. Grab 現在のレーベルのページにロードされている製品を取得します。
しかし、私たちが今行ったことは、2 番目のステップの開始時に、2-4 が完了するまで待たずに次のステップにループするということです。async/await を使用しようとしましたが、プロセス制御は使用できませんでした。実装されました。ここでアドバイスを求めています。
リーリー次に、結果の図とコードの実行シーケンスを示します:
generator
async
promise
你这整个过程都是异步的,没看出一点同步的意思。我觉得你可能没有理解什么是异步。
Async/await 是建立在 Promise 基础上的,而 Superagent 本身是支持 Promise 的,你可以直接用 async/await。
http://visionmedia.github.io/...
http://www.ruanyifeng.com/blo...
然后你需要的就是把
http.get()
换成superagent.get()
。一般他人的业务逻辑都没什么耐性能看下去。
如楼上所言,Async/await 是建立在 Promise 基础上,如果你调用的第三方库的API接口没有返回promise对象的话,想用Async/await 你只能自己每一步都新建一个promise对象,这样其实写起来也很麻烦,当然如果能返回promise对象的话就很方便。
以下不用promise 用node核心模块event写的,供你参考一下:
可以使用 Node8 的
util.promisify
,或者 Bluebird 等把 Node 回调形式的函数改成 Promise 风格的函数,然后就可以使用async/await
来写代码。代码本身还是异步调用,只是写法看起来像是同步的。所以在写的时候还是要注意流程结构,尤其是在写循环的时候。代的代码太长,所以我写个小例子来说明