我有以下代码,其中str数组将在fetchRows函数中添加json对象。问题是,它是在从fetchrows获取值之前发送str。基本上我希望在发送数组str之前结束四种方法。
var app = express();
app.get('/data', function (req, res) {
str = [];
async.waterfall([connect, execute, fetchRows], done );
wait.launchFiber(done);
res.send(str);
console.log("in done" + str);
//res.send(str);
});
欣赏任何指示。
答案 0 :(得分:-1)
注意:我不知道异步
nodejs是一个事件驱动的系统,除了以阻塞方式写入之外,没有任何东西阻止它。上面的代码中发生的是节点引擎到达行
async.waterfall([connect, execute, fetchRows], done );
它调用该函数。然后是异步模块,确保在执行函数之前调用connect并完成fetchRows。但是,如果节点立即命中它不会阻塞,它将在以后的某个时间插入要执行的操作,并继续到下面的一行
res.send(str);
所以,显然这将首先完成
简易解决方案
记住我不知道异步
var app = express();
app.get('/data', function (req, res) {
str = [];
async.waterfall([connect, execute, fetchRows, finish], done );
// I don't know what this line does
wait.launchFiber(done);
function finish() {
res.send(str);
}
});
这个解决方案的作用是将你的response.send(str)包装成一个函数,并作为fetchRows之后调用的最后一个函数。