gpt4 book ai didi

javascript - 在 Node.js 中处理 'unmeasured' 的通用方法

转载 作者:行者123 更新时间:2023-12-02 13:56:39 24 4
gpt4 key购买 nike

NB:不要将其视为代码审查,我可以想象套接字而不是 REST API 或任何其他数据源。问题是如何以 JS 方式解决此类任务

我使用一些暴露一些项目的rest 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 函数中

那么,我怎样才能更好地重写这段代码呢?

最佳答案

这是一个使用回调的示例,

我还使用了 bluebirds try,这很方便,如果你不在回调中返回 promise ,它仍然可以工作,IOW:如果你愿意,你的回调也可以是 promise 。

function grab(cb, acc, offset) {
acc = acc || []
offset = offset || 0
return call(offset)
.then((items) => {
return bluebird.try(() = > cb(items)).then(() => {
if(items.length < STEP) {
return
}
return grab(cb, [], offset + STEP)
})
})
}

//To use..

grab((items) => {
//do something with items.
});

关于javascript - 在 Node.js 中处理 'unmeasured' 的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40653484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com