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() 可能更容易。
...
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() 可能更容易。