[英]mongoosejs return a model.find with an altered object
查詢貓鼬模型並將更改后的對象傳遞到下一個Promise鏈時出現問題。
該查詢確實傳遞到下一個.then .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 );
})
您正在使用一個回調這里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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.