我通过WebMatrix创建了express.js示例。我想创建一个api来获取myfunction的结果。如果第一个请求案例很复杂并且花费很多时间并且第二个请求案例很简单,则第二个请求必须等待第一个请求完成。我可以做第二个请求比第一次请求更快地返回数据的事情吗?
app.post('/getData', function(req, res) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
var case= req.body.case;
var json = myfunction(case);
res.json(json);
});
答案 0 :(得分:3)
您可以使用async来实现:
var async = require('async');
async.waterfall([
function(callback){ // first task
// process myCase (don't use case, it's reserved word),
// then pass it to your next function
callback(null, myCase); // 1st argument: null means no error
// if error, pass error in 1st arg
// so that 2nd function won't be
// executed
},
function(myCase, callback){ // 2nd task
// use argument 'myCase' to populate your final json result (json)
// and pass the result down in the callback
callback(null, json);
}
], function (err, json) {
// the argument json is your result
res.json(json);
});
答案 1 :(得分:1)
如果您愿意,您不必使用任何外部库。你可以这样做:
console.log('1');
function async(input, callback) {
setTimeout(function() {
//do stuff here
for (var i = 0; i < input; i++) {
//this takes some time
}
//call callback, it may of course return something
callback('2');
}, 0);
}
async('10000000', function(result) {
console.log(result);
});
console.log('3');
你可以测试一下,然后看看,&#34; 2&#34;将在1和3之后打印机。 希望它有所帮助。
PS您也可以使用setInterval或Underscore库:
var _ = require('underscore');
console.log('1');
function async(input, callback) {
_.defer(function() {
//do stuff here, for ie - this time-consuming loop
for (var i = 0; i < input; i++) {
//this takes some time
}
//call callback, it may of course return something
callback('2');
});
}
async('10000000', function(result) {
console.log(result);
});
console.log('3');