async.js 个方法在 async.js 个方法中
async.js methods inside async.js methods
免责声明:对 JS 及其周围的一切都是新的。 :)
我想知道我们是否可以将异步函数相互嵌套
我在节点中有一个瀑布方法:
/**
* POST new travel wish
*/
router.post('/add', function(req, res) {
var db = req.db;
console.log(req.body);
// add properties: customer_id and timestamp
var date = new Date();
//...
var notif;
async.waterfall(
[
// find the User
function(next){
db.collection(userCollection).findOne({_id: new ObjectId(req.session.userID)}, next);
},
// insert a new travelwish
function(user, next){
notif = {
'username': user.username,
};
// TODO: add a async.parallel
db.collection('travelwishlist').insert(req.body, next);
},
// setup timer for processing and send confirmation
function(insertedTravelWish, next){
NotificationManager.sendConfirmationNotification(notif);
next(null, insertedTravelWish);
}
],
// waterfall callback --> send http response.
function (err, insertedTravelWish) {
res.send(
//if everything is ok the system sends the travel wish ID to the client otherwise error
(err === null) ? { msg: insertedTravelWish[0]["_id"] } : { msg: 'err' }
);
}
);
});
我想插入多项而不是一项。
我想我可以并行执行此操作,但我可以将它放在现有的瀑布中吗?
是的,你完全可以做到,这里是一些例子
async.waterfall([
function (callback) {
callback(null, 1);
},
function (arg, callback) {
callback(null, arg1 + 1);
},
function (arg, callback) {
async.parallel([
function (_callback) { ... },
function (_callback) { ... },
], finalCallback);
}
]);
只是一个小提示,如果我有 2 个需要回调的嵌套函数,请确保为回调提供不同的名称(这样你就不会调用另一个)我将它们命名为 callback
_callback
__callback
免责声明:对 JS 及其周围的一切都是新的。 :)
我想知道我们是否可以将异步函数相互嵌套
我在节点中有一个瀑布方法:
/**
* POST new travel wish
*/
router.post('/add', function(req, res) {
var db = req.db;
console.log(req.body);
// add properties: customer_id and timestamp
var date = new Date();
//...
var notif;
async.waterfall(
[
// find the User
function(next){
db.collection(userCollection).findOne({_id: new ObjectId(req.session.userID)}, next);
},
// insert a new travelwish
function(user, next){
notif = {
'username': user.username,
};
// TODO: add a async.parallel
db.collection('travelwishlist').insert(req.body, next);
},
// setup timer for processing and send confirmation
function(insertedTravelWish, next){
NotificationManager.sendConfirmationNotification(notif);
next(null, insertedTravelWish);
}
],
// waterfall callback --> send http response.
function (err, insertedTravelWish) {
res.send(
//if everything is ok the system sends the travel wish ID to the client otherwise error
(err === null) ? { msg: insertedTravelWish[0]["_id"] } : { msg: 'err' }
);
}
);
});
我想插入多项而不是一项。
我想我可以并行执行此操作,但我可以将它放在现有的瀑布中吗?
是的,你完全可以做到,这里是一些例子
async.waterfall([
function (callback) {
callback(null, 1);
},
function (arg, callback) {
callback(null, arg1 + 1);
},
function (arg, callback) {
async.parallel([
function (_callback) { ... },
function (_callback) { ... },
], finalCallback);
}
]);
只是一个小提示,如果我有 2 个需要回调的嵌套函数,请确保为回调提供不同的名称(这样你就不会调用另一个)我将它们命名为 callback
_callback
__callback