Return 多个值,包括承诺

Return multiple values, including a 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() 应该 return 的整个对象,它仍在等待中。

您可以嵌套承诺:

...
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(...)
}) 
somePromise.then(() => {
    const me = 'you';
    return aPromise().then(aPromiseData => Promise.resolve({aPromiseData, me}))
}).then(data => {
    const {aPromiseData, me} = data;
})

如果我对你的问题理解正确,你可以将 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() 可能更容易。