蓝鸟承诺

时间:2018-01-29 15:10:14

标签: javascript node.js promise bluebird

我是JS的初学者,想要在Node.js中发送顺序请求。 我正在尝试使用Promises(Bluebird)。我正在使用supertest库来发送请求。当我执行函数call()时,在sendRequest()之前执行debug(),但是我想在sendRequest解析后运行调试。怎么做到这一点?

var call = function() {
  getConfig
    .then(function(config) {
      sendRequest(config);
    })
    .then(function(result) {
      debug('Result', result);
    });
}

var getConfig = new Promise(function(resolve, reject) {
  var config = injector.get('config');
  config.property = newProperty;
  if (config) {
    resolve(config);
  } else {
    reject('Config is ', config);
  }
});

var sendRequest = function(configFile) {
  var config = configFile;
  return new Promise(function(resolve, reject) {
    request(server)
      .get(endpoint)
      .expect(200)
      .end(function(err, res) {
        if (err) {
          reject(err);
        }

        resolve(res.body);
      });
  })
};

如何将这些getConfig和sendRequest中的几个调用链接在一起,以便它们在上一个操作完成后启动?

var result1;
var result2;
var call = function () {
  getOldConfig
    .then(function (config) {
        return sendRequest(config);
    })
    .then(function (result) {
        result1 = result;
    })
    .then(getActualConfig)
    .then(function (config) {
        return sendRequest(config);
    })
    .then(function (result) {
        result2 = result;
    });
}

1 个答案:

答案 0 :(得分:1)

你需要返回内心的承诺

getConfig
    .then(function (config) {
        return sendRequest(config); // NB
    })
    .then(function (result) {
        debug('Result', result);
    });