我对javascript和使用nodejs相对较新。我有一个情况,如果减少woulf归结为下面的代码。我可以直接在回调函数中返回,而不像我在下面的代码中那样创建另一个变量(temp)。
exports.run = function(req, res) {
var testRunId = req.body.testRunId;
var testFileDir = './uploads/temptestfiles/'+ testRunId + '/';
var error = null
var status ;
mkpath(testFileDir, function (err) {
if (!err) {
error = {error:'could not create logs directory'}
status = 500
};
});
if (status === 500) {
return res.send(500, error);
}
//handle many more cases
}
以下是愚蠢的版本。
var a = function(param,callback) {
callback(param);
};
var base = function() {
val temp = null;
a(5, function(a){
//can I do something like return 2*a and end the parent function
temp = 2*a;
});
return temp;
}
我意识到我实际上需要使用mkpath的同步版本,因为我不希望在创建dir之前运行更多代码。所以我的代码改为
try {
mkpath.sync(testFileDir);
} catch(err) {
return res.status(500).send({error:'couldn\'t create directory to store log files'});
}
答案 0 :(得分:1)
你愚蠢的问题(这是同步的)。当然可以,但你必须从你的回调,你的回调处理程序和你的调用函数返回值。
var a = function (param, callback) {
return callback(param);
};
var base = function () {
return a(5, function (a) {
return 2*a;
});
}
这在异步情况下不起作用,然后您需要回调函数,或者返回延迟,承诺或未来。
例如
function asynchDoubler(number) {
var deferred = new Deferred();
setTimeout(function () {
deferred.callback(2*number);
}, 1);
return deferred;
}
asynchDoubler(5).addCallback(function (result) {
console.log(result);
});
// outputs 10