承诺返回多个值

时间:2017-09-28 11:53:25

标签: javascript ecmascript-6 promise bluebird

我使用以下代码返回正在运行的承诺确定。 承诺返回data

run: () => {

    return new Promise((resolve, reject) => {
  ....

}).then((data) => {
    let loginApi = data[0]
   let test = 1; 

    }).catch((err) => {
        if (err.statusCode === 302) {
            var data = url.parse(err.response.headers.location, true)
            resolve(data )
        }
    })
});

我称之为

module.run()
    .then((data) => {

我能够获得数据。

现在我想在决心中返回值test,我应该怎么做?

我尝试像这样添加它

resolve({data,test});

resolve([data,test]);

调用

module.run()
    .then({data,test}) => {

没有成功(测试是空的),我读到了spread,但这是唯一的选择吗?

我将ES6bluebird最新版本

一起使用

1 个答案:

答案 0 :(得分:0)

如果您正在使用承诺链,那么您可以在承诺链中使用> then-> catch-> ...格式。始终返回Promise.resolvePromise.rejectPromise.resolve将为下一个then块提供成功结果,Promise.reject将转到下一个阻止块。

var module = {
  run: () => {

    return new Promise((resolve, reject) => {
      // ....
      resolve('promise resolved')
    }).then((data) => {
      let loginApi = data[0]
      let test = 1;
      return Promise.resolve({data,test})
    }).catch((err) => {
        if (err.statusCode === 302) {
            var data = url.parse(err.response.headers.location, true)
            return Promise.resolve({data, test});
        }

        return Promise.reject(err);
    })
  }
};

module.run().then(({data, test}) => {
  console.log(data, test);
})