NB:コードレビューとして考えないでください。私はREST APIの代わりにソケットや他のデータソースを想像することができます。問題は、JSの方法でこの種のタスクを解決する方法です。Node.jsで「測定されていない」ものを扱う一般的な方法
いくつかのアイテムを公開するいくつかの残りのAPIを使用します。オフセットとカウントによってアイテムを取得できます。しかし、一度に最大1000。それは動作しますが、いくつかの問題を抱えている
const request = require('superagent')
const _ = require('lodash')
const bluebird = require('bluebird')
const STEP = 1000
function call(offset) {
return bluebird.resolve(
request
.get('someapi/items')
.auth('name', 'key')
.query({
offset: offset,
languagecodes: ['en']
})
)
.then((req) => req.body)
}
function grab(acc, offset) {
acc = acc || []
offset = offset || 0
return call(offset)
.then((items) => {
doSomething(items)
if(items.length < STEP) {
return
}
return grab([], offset + STEP)
})
}
grab().then(() => {
finishDo()
}).catch(function(err) {
console.log(err)
throw err
})
:
-
そして、あなたは、私は以下のコードを使用して、この種の仕事のためのアイテムの数(あなただけ自分でそれらを数えることができる)
- コードは、私が
grab
関数の内部ですべてを置く必要がある - あまりにも具体的である
を照会カント私は、ビジネスロジック(集約、フィルタリング、変換)のいずれかの種類が必要な場合は
このコードをどのように書き直すことができますか?ここで
ストリームのNode.jsを作成して処理するためにhighland.jsを使用するサンプルの下 。彼らは一緒に働く。あなたのコールバックは、物事を約束しておくという約束を返すこともできます。 – Keith
(cities)=> {}構文を使用する代わりに、 'return call(offset).then(()=> {referenced_function(cities)}')のように関数を引数として渡すことを検討してください。 –
ご意見ありがとうございます。私は私の答えを追加しました – kharandziuk