我的问题涉及承诺并提供以前的连锁承诺价值。问题是,项目是从第一个返回承诺传递到第二个承诺" runItem - > testItem"
或者我们是否必须通过所有承诺传递该项目?
示例:
db.items.find({_id: id}).then(function (res) {
runItem(item);
})
function runItem(item) {
removeFromQueue(item.id).then(function () {
testItem(item);
});
}
function testItem(item) {
...
}
function removeFromQueue(item) {
return db.queue.remove({_id: item._id});
}

编辑: 也许这会是一个更好的例子:
我们可以访问原始属性项,还是在下次调用函数时会被覆盖?
function start(id)
db.find({_id: id}).then(function (item) {
test(item).then(function (res) {
// can we access original attribute item, or is it going to be overwritten when the next time function is called
resolve({ res: res, item: item });
});
});
}
function test(item) {
return $test(item).then(function () {
resolve('success');
});
}

答案 0 :(得分:0)
您可以更改先前承诺的返回值,然后只返回它。下一个承诺将受到影响。检查此示例:
var promise = new Promise(function(res,rej){ res({data: 7}) }); // start with {data:7}
var promise1 = promise.then(function(res){ console.log('promise.then: ' + JSON.stringify(res)); return res.data; }); // log: {data:7}. return: 7
var promise2 = promise1.then(function(res) { console.log('promise1.then : ' + res); return res + 1;}); // log:7. return 8.
var promise3 = promise2.then(function(res) { console.log('promise2.then: ' + res); return res;}); // log:8. return 8.
var promise4 = promise3.then(function(res) { console.log('promise3.then: ' + res); return res;}); // log:8. return 8.
答案 1 :(得分:0)
尝试 Promise.props 功能。
像
这样的东西...
{
...
return Promise.props({res: res, item: item}).
.then(function(result){
return Promise.resolve({ res: res, item: item });
});
}
答案 2 :(得分:-1)
您发布的示例并不会返回promise
个对象。
以下是promise
中链接内容的示例,请查看。
functionA = function(text) {return new Promise(function(resolve) {
resolve(text);
console.log(text + " at function A");
});
}
functionB = function(text) {return new Promise(function(resolve) {
resolve(text);
console.log(text + " at function B");
});}
functionA("test").then(function (res)
{
console.log(res + " at then");
runItem(res);
})
function runItem(item) {
functionB(item).then(function (res) {
console.log(res + " at Function Run Item");
testItem(res);
});
}
function testItem(item) {
console.log(item + " at Function testItem");
}
在上面的示例中,您可以看到runItem(item)
' s item
已传递给promise
functionB
的{{1}}对象,而已解决的对象在then
中返回{1}} res
,由testItem(res)
进一步使用。
如果您想对runItem(item)
item
进行任何操作,可以在FunctionB