返回多个值,包括promise

时间:2016-07-27 13:37:29

标签: javascript ecmascript-6 q es6-promise

...
var me = 'you';
return aPromise();
}).then(data => {
  // i want me here
})

function aPromise() {
  return new q.Promise((resolve, reject) => {
      resolve(iReturnAnObject());
    }, reject);
});

我希望me方法范围内的then变量。如果我尝试这样的话:

...
var me = 'you';
return [aPromise(), me];
}).then(data => {
  let promise, me;
  [promise, me] = data;
  console.log(promise); //incomplete object
})

promise变量不包含aPromise()应该返回的整个对象,它仍处于未决状态。

3 个答案:

答案 0 :(得分:1)

你可以嵌套承诺:

...
var me = 'you';
return aPromise().then(data => {
  // me is here
})

否则,您必须包装已解析值的数组:

  ...
  var me = 'you';
  return Promise.all([aPromise(), me]);
}).then(data => {
  let [promise, me] = data;
  // use me here
  promise.then(...)
}) 

答案 1 :(得分:0)

somePromise.then(() => {
    const me = 'you';
    return aPromise().then(aPromiseData => Promise.resolve({aPromiseData, me}))
}).then(data => {
    const {aPromiseData, me} = data;
})

答案 2 :(得分:0)

如果我正确理解了您的问题,您可以将var注入成功回调。

const other = 'other var';
const promise = new Promise(
        function(resolve, reject) {
            window.setTimeout(
                function() {
                    // We fulfill the promise !
                    resolve('response');
                }, 2000);
        }
    );

// or

promise.then(function(other, response) {
  console.log(other, response);
}.bind(null, other))

你能提供更多背景吗?将其他变量传递给resolve()可能更容易。