gpt4 book ai didi

javascript - javascript 中范围界定如何工作

转载 作者:行者123 更新时间:2023-12-03 12:37:43 26 4
gpt4 key购买 nike

我对 javascript 比较陌生,并且在 Nodejs 上工作。我遇到的情况是,如果减少的话,可以归结为以下代码。我可以直接在回调中返回而不创建另一个变量(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 的同步版本,因为我不想在创建该目录之前运行更多代码。所以将我的代码更改为

try {
mkpath.sync(testFileDir);
} catch(err) {
return res.status(500).send({error:'couldn\'t create directory to store log files'});
}

最佳答案

关于你愚蠢的问题(这是同步的)。当然可以,但是您必须从回调、回调处理程序和调用函数返回值。

var a = function (param, callback) {
return callback(param);
};

var base = function () {
return a(5, function (a) {
return 2*a;
});
}

这在异步情况下不起作用,那么你需要回调函数,或者返回一个 deferred、promise 或 future。

例如

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

关于javascript - javascript 中范围界定如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23659213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com