我想从this.dorequest()返回后访问恰好是全局变量的'key'。我在if块中获取了密钥,但无法在外部访问它。有人可以帮忙吗?很确定它是范围/提升问题。提前谢谢!
var key;
jira.addNewIssue = function(issue) {
var options = {
uri: this.makeUri('/issue'),
method: 'POST',
followAllRedirects: true,
json: true,
body: issue
};
this.doRequest(options, function(error, response, body) {
**var key;** (removed this but still an error)
if (error) {
console.log('Error1')
return;
}
else {
key = response.body.key;
console.log("THIS IS RESPONSE BODY KEY:", key); //no errors 123
return key;
}
});
};
console.log("hello key", key); //undefined
答案 0 :(得分:3)
您正在使用
var key;
在块内部,这意味着您在块范围内重新定义它,使其成为该范围内的不同变量。只需删除var语句。
另外,在异步调用中分配键变量,在到达console.log语句之前可能尚未完成。将console.log语句移动到回调函数中或创建一个事件以在回调结束时触发console.log语句。
在异步回调中使用全局变量可能不是一个好主意。我不确定你的return语句是否有任何作用(取决于你正在使用的库的API),但肯定不会分配关键变量。
答案 1 :(得分:0)
请使用window.key
。所有全局JavaScript对象,函数和变量都自动成为窗口对象的成员。
答案 2 :(得分:0)
将代码包装在闭包中或将键添加到窗口。
即。 window.key = undefined;
答案 3 :(得分:0)
在闭包中添加代码或使键变量全局
即。 window.key = undefined.
同时检查response.body.key