具有一个响应的多个回调-Node JS
Multiple Call backs with one response -Node JS
我从客户端收到一个请求,该请求需要从两个表中选择数据,从一个表中我需要在表2中选择1000条记录,我只需要选择两条记录,通过回调处理。我想要两个回调函数执行后需要发送给我的客户端的响应,如何在node js中实现这一点?
您有以下选项:
- 遵循Node样式的回调模式。另请阅读,回调地狱
- 遵守承诺
回调模式
var f = function(somedata, cb){
// pick user from db
pickUserFromTable1(somedata, function(err, users){
// callled on completion of pickUserFromDB
if(err){
//handle error.
cb(err, null);
return;
}
pickUserFromTable2(users, function(err, finallySelectedUsers){
// called on completion of pickUserFromTable2
if(err){
// handle error.
cb(err, null);
// returning is important. or use else part of if to separate the case
return;
}
// call initiator's callback function on completion of both pickUserFromTable1 and pickUserFromTable2
cb(null, finallySelectedUsers);
});
})
}
注意:这种方法适用于短项目,但如果依赖链很长,则会导致一些维护问题(回调地狱)。
欢迎来到回调地狱!你只需要建立吡喃酰胺形式的回调!
示例:
function getDataFromDB (query, successCb, errorCb) {
executeFirstQuery(query, function(firstQueryData) {
console.log('First query ok! Now execute second.');
executeSecondQuery(query, function(secondQueryData) {
console.log('Second query ok! Now execute successCb().');
successCb([firstQueryData, secondQueryData]);
}, function(error) {
errorCb("Error in second query");
})
}, function(error) {
errorCb("Error in first query");
});
}
function executeFirstQuery (query, successCb, errorCb) {
console.log("Execute first query!");
successCb("Some data from first query");
// errorCb("Some Error from first query");
}
function executeSecondQuery (query, successCb, errorCb) {
console.log("Execute second query!");
successCb("Some from second query");
// errorCb("Some Error from second query");
}
getDataFromDB("Some sql", function(data) {
console.log(data);
}, function(error) {
console.error(error);
});
或者使用承诺:http://documentup.com/kriskowal/q/
相关文章:
- 重构DRY代码的Node.JS回调
- 未为路由器应用程序调用Node.Js的回调
- Node.js exec调用从不调用回调
- Node.js使变量等待分配,直到回调函数完成
- Node.js,为事件分配回调函数'数据'
- Node.js正确的回调错误句柄
- node.js mongojs findOne回调返回错误为null
- 在 Node.js 中脱离回调函数中的“for”循环
- 将数据注入异步回调(使用 node.js)
- 使用生成器函数 next() 作为 node.js 中的回调
- Node.JS函数返回异步回调函数的值
- node.js+MySQL;JSON结果-回调问题&没有响应客户端
- 理解node.js回调
- Node.JS:类方法作为回调
- Node.js如何知道回调的第一个参数是否是错误处理程序
- 将Node REPL调整为不阻塞异步回调的提示
- node.js回调函数generanddb
- 如何在node.js中用读取流正确实现回调逻辑
- 具有一个响应的多个回调-Node JS
- 返回javascript回调(node.js)的结果