【发布时间】:2016-12-02 19:51:47
【问题描述】:
我正在尝试使用从谷歌表格中抓取的值填充我的数据库。 hasuraHelper.insert() 将 HTTP 发布到我的数据库。如何使 insert() 仅在上一个 api 调用返回后才被调用?我认为 concatMap 可以解决问题,但它似乎仍然急切地订阅所有排放。
当前:请求 1 -> 请求 2 -> ... -> 请求 1 完成 -> 请求 2 完成 -> ...
我想要什么:请求 1 -> 请求 1 完成 -> 请求 2 -> 请求 2 完成 -> ...
下面是相关代码:
sheetsHelper.authToken()
.flatMap(sheetsHelper.get)
.flatMap(response => response.values) //values is a 2d array
.map(row => {
console.log(row[0]);
const flights = [];
//add 100-500 objects to this array
return flights;
})
.flatMap(flights => {
const arrayOfFlightArrays = [];
//max batch size of 50
while (flights.length) {
const flightArr = flights.splice(0, 50);
arrayOfFlightArrays.push(flightArr);
}
return Rx.Observable.from(arrayOfFlightArrays);
})
.concatMap(flights => hasuraHelper.insert(flights) //insert flights into table
.retry())
.map(response => response.data)
.subscribe(console.log, console.error);
这是插入的样子:
exports.insert = function (objects) {
return Rx.Observable.fromPromise(axios({
method: 'post',
url: '/',
data: {
type: "insert",
args: {
table: "flights",
objects: objects
}
}
}));
};
【问题讨论】:
标签: javascript node.js rxjs