如何确保请求按顺序完成?

how to ensure request is done sequentially?

我想一个接一个地请求,下面的代码好像是同时请求所有的页面,请问有没有办法在上一个页面完成后再获取一个页面?谢谢

var Promise = require("bluebird");
var request = Promise.promisifyAll(require('request'));
var URLS = ["http://sample.com/j1", "http://sample.com/j2"]

Promise.map(URLS, function (item) {
    return request.postAsync({url: item}).spread(function (response,body) {
    var items = JSON.parse(body)
    return items
})
}).then(function (r) {
    console.log(r.length)
})

您可以设置concurrency级别,这是bluebird特有的。

Promise.map(URLS, function (item) {
    return request.postAsync({url: item}).spread(function (response,body) {
    var items = JSON.parse(body)
    return items
}, { concurrency: 1})

这将一次发出所有承诺。