我有三个函数,我想用正确的回调调用函数,所以值从一次使用返回。问题是我的回调函数在main函数之后执行,而我期望从回调函数返回值。
我有三个函数saveUser,savePoet,saveArtist。所有都应该在ssequence中执行,因此saveUser返回savePoet并将savePoet返回到saveArtist。我试过的是。
var selectedRow = null;
var table = $('#processing').DataTable();
$('#processing tbody').on( 'click', 'tr', function (e) {
e.stoppropagation();
selectedRow = table.row( this ).data();
return false;
})
$(body).click(function(){
selectedRow = null;
});
$("#CompleteIt").click(function () {
if(selectedRow){
//process the request
return true;
}
alert("No row is slected");
})
答案 0 :(得分:2)
您正在尝试使用 synchronized .map
与异步 .save
这是错误的方式,在这种情况下,您需要使用像{{3这样的库} {(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');
});