Javascript 带返回函数的正确回调
我有三个函数,我想用适当的回调函数调用这个函数,这样值在一秒钟内从一次使用返回。问题是我的回调函数在主函数之后执行,而我期望回调函数返回值 我有三个函数saveUser、savepoter和saveArtist。所有操作都应按顺序执行,以便saveUser返回savepoter,savepoter返回saveArtist。我尝试的是Javascript 带返回函数的正确回调,javascript,node.js,Javascript,Node.js,我有三个函数,我想用适当的回调函数调用这个函数,这样值在一秒钟内从一次使用返回。问题是我的回调函数在主函数之后执行,而我期望回调函数返回值 我有三个函数saveUser、savepoter和saveArtist。所有操作都应按顺序执行,以便saveUser返回savepoter,savepoter返回saveArtist。我尝试的是 var saveUsers = function (callback) { var users = [{ name
var saveUsers = function (callback) {
var users = [{
name: 'xyz',
email: 'xyz@abc.com'
}, {
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);
}
});
});
}
您正在尝试将synchronous.map
与asynchronous一起使用。save
这是错误的方法,在这种情况下,您需要使用类似(npm i async
)的库,如下所示
var async = require('async');
var saveUsers = function(callback) {
var users = [{
name: 'xyz',
email: 'xyz@abc.com'
}, {
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');
});
为什么要使用
map
在数组中循环?我希望逐个保存记录。map用于复制新数组。你应该使用每个。好的。我会改变它。我将如何处理回调到其他的函数?