[英]Async loop inside promise - how to keep order
Before rendering page I need to make sure that all stuff fetched from api call is saved to database. 在渲染页面之前,我需要确保从api调用中获取的所有内容都保存到数据库中。
let saveUsersToDB = function () {
//fetch users func
return getAllUsers.then((data) => {
//save to db func
async.each(data, (user, callback) => {
//Mongoose model
let newUser = new User;
//save to db
newUser.save((err) => {
if (err) {
callback(err)
}
else {
callback('user saved');
}
})
// async.each callback
}, function (err) {
if (err) {
console.log('error');
} else {
console.log('Async each done');
}
});
});
};
When I call this like: 当我这样称呼:
saveUsersToDB().then(()=>{
console.log("All users saves")
})
The result is: 结果是:
//All users saved
//Async each done
I can't figure out proper construction to keep right order in then() chain. 我无法找出适当的构造来保持then()链中的正确顺序。
The callback for getAllUsers.then should return a promise. getAllUsers.then的回调应返回一个promise。 Otherwise the saveUsersToDB.then callback will be invoked immediately following getAllUsers. 否则,将在getAllUsers之后立即调用saveUsersToDB.then回调。
//fetch users func
let saveUsersToDB = () => getAllUsers.then( ( data ) => new Promise( ( resolve, reject ) => {
//save to db func
async.each( data, ( user, callback ) => {
//Mongoose model
let newUser = new User();
//save to db
newUser.save( ( err ) => {
if ( err ) return callback( err );
console.log( "user saved" );
callback();
} );
// async.each callback
}, function ( err ) {
if ( err ) return reject( err );
console.log( "all users saved" );
resolve();
} );
} ) );
saveUsersToDB().then( () => console.log( "done" ) );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.