我有三个函数,我想使用适当的回调函数来调用函数,以便该值在第二次使用中返回一次。问题是我希望从回调函数返回值时,我的回调函数在main函数之后执行。
我有三个功能saveUser,savePoet,saveArtist。所有操作都应按顺序执行,因此saveUser返回savePoet,savePoet返回saveArtist。我尝试过的是。
var saveUsers = function (callback) {
var users = [{
name: 'xyz',
email: '[email protected]'
}, {
name: 'User New',
}],
savedUser = [];
console.log('Saving Users --');
__.map(users, function (record) {
var recordType = new User(record);
recordType.save(function (err, result) {
if (err) console.log(err);
if (!err) {
console.log('Inserted user - ' + result.name);
savedUser.push(result._id);
}
});
});
callback(savedUser);
};
saveUsers(function (savedUsers) {
console.log(savedUsers);
console.log('Saving Poets --');
var poets = [{
name: 'First Poet',
userId: savedUsers[0]
}, {
name: 'Second Poet',
userId: savedUsers[0]
}, {
name: 'Third Poet',
userId: savedUsers[0]
}];
__.map(poets, function (record) {
var recordType = new Poet(record);
recordType.save(function (err, result) {
if (err) console.log(err);
if (!err) {
console.log(result);
console.log('Inserted poet - ' + result.name);
}
});
});
});
var saveArtist = function(){
console.log();
console.log('Saving Artist --');
var artists = [{
name: 'First artist',
userId: savedUsers[0]
}, {
name: 'Second artist',
userId: savedUsers[0]
}, {
name: 'Third artist',
userId: savedUsers[0]
}];
__.map(artists, function (record) {
var recordType = new Artist(record);
recordType.save(function (err, result) {
if (err) console.log(err);
if (!err) {
console.log(result);
console.log('Inserted artist - ' + result.name);
}
});
});
}
您尝试以错误的方式使用同步 .map
与异步 .save
,在这种情况下,您需要使用像async(npm i async
)这样的库
var async = require('async');
var saveUsers = function(callback) {
var users = [{
name: 'xyz',
email: '[email protected]'
}, {
name: 'User New',
}];
async.mapSeries(users, function (record, next) {
new User(record).save(function (err, result) {
if (err) {
return next(err);
}
console.log(result);
console.log('Inserted poet - ' + result.name);
next(result);
});
}, function (err, users) {
if (err) {
return callback(err);
}
callback(users.map(function (user) {
return user._id;
}));
});
};
function savePoets(users, callback) {
var poets = [{
name: 'First Poet',
userId: users[0]
}, {
name: 'Second Poet',
userId: users[0]
}, {
name: 'Third Poet',
userId: users[0]
}];
async.eachSeries(poets, function (record, next) {
new Post(record).save(function (err, result) {
if (err) {
return next(err);
}
console.log(result);
console.log('Inserted poet - ' + result.name);
next();
});
}, function (err) {
if (err) {
return callback(err);
}
callback();
});
}
function saveArtists(users, callback) {
var artists = [{
name: 'First artist',
userId: users[0]
}, {
name: 'Second artist',
userId: users[0]
}, {
name: 'Third artist',
userId: users[0]
}];
async.eachSeries(poets, function (record, next) {
new Artist(record).save(function (err, result) {
if (err) {
return next(err);
}
console.log(result);
console.log('Inserted poet - ' + result.name);
next();
});
}, function (err) {
if (err) {
return callback(err);
}
callback();
});
}
async.waterfall([
function (next) {
saveUsers(next);
},
function (users, next) {
async.parallel([
function (next) {
savePoets(users, next);
},
function (next) {
saveArtists(users, next);
}
], next);
}
], function (err) {
if (err) {
return console.log(err);
}
console.log('Done');
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句