查询猫鼬模型并将更改后的对象传递到下一个Promise链时遇到问题。
查询确实传递到下一个.then
,但没有我新分配的spaceTempName。
您知道如何解决此问题吗?
// promise - search for workspace ...
var promise = Space.findOne( spaceId ).exec();
promise.then( function ( space ) {
return Stack.findOne( { _id: req.params.id }, function( err , stack ) {
stack.spaceTempName = space.name;
stack.name = 'test';
console.log( stack );
return stack;
});
})
.then( function ( stack ) {
console.log( stack );
})
答案 0 :(得分:1)
您在return Stack.findOne( { _id: req.params.id }, function
处使用了回调,然后返回stack
,而下一个then
不变。您可以仅在该回调中获得stack
的更改,或者在then
之后添加Stack.findOne
:
// promise - search for workspace ...
var promise = Space.findOne( spaceId ).exec();
promise.then( function (space) {
return Stack.findOne( { _id: req.params.id })
.then(function (stack) {
stack.spaceTempName = space.name;
stack.name = 'test';
console.log(stack);
return stack;
})
.catch(function (err) { console.log(err) });
})
.then( function (stack) {
console.log(stack);
})
.catch(function(err) { console.log(err) });
为了提高可读性,您可以将其放入async
函数中并使用await
:
const updateSpaceName = async (req, res) => {
try {
// promise - search for workspace ...
promise = Space.findOne( spaceId ).exec();
const space = await promise();
const stack = await Stack.findOne( { _id: req.params.id } );
stack.spaceTempName = space.name;
stack.name = 'test';
console.log( stack );
// here you can pass stack to another promise
// and it will have changed name
await nextTestPromise(stack);
} catch (err) {
console.log(err);
}
}