首先我想问一下这是不是可能的,设置值为全局变量在异步函数或承诺?
如果是,那么为什么每个可用的教程/网站都在教程中使用console.log(结果),但从来没有使用它将其赋值给variable。
例如:
var promise1 = new Promise(function(resolve, reject) {
resolve('foo');
});
let myval="";
promise1.then(function(value) {
myval=value;
console.log(value); // this logs "foo"
});
console.log(myval); //this logs blank
这会将全局变量myval
更改为'foo'
,但在调用console.log(myval);
时,由于超时,承诺尚未解析,即使您立即解析了承诺,它仍然只能在console.log(myval);
运行后更改,因为承诺将作为微任务排队。
我会添加一个setTimeout来等待分配,或者添加一个setInterval来检查它发生的时间。
var promise1 = new Promise(function(resolve, reject) {
resolve('foo');});
let myval="";
promise1.then(function(value) {
myval=value;
console.log(value); // this logs "foo"
});
setTimeout(() => console.log(myval), 1000); //this logs 'foo'
如果您希望访问myval
的更改版本(即在Promise中的赋值完成后执行代码),您需要继续执行另一个then
,或者在赋值完成后执行任何其他将代码放入事件队列的操作。
var promise1 = new Promise(function(resolve, reject) {
resolve('foo');
});
let myval="a";
promise1.then(function(value) {
myval=value;
console.log(value); // this logs "foo"
});
setTimeout(() => console.log(myval), 0); // logs "foo"
var promise1 = new Promise(function(resolve, reject) {
resolve('foo');
});
let myval="a";
promise1.then(function(value) {
myval=value;
console.log(value); // this logs "foo"
}).then(function() {
console.log(myval) // logs "foo"
});
还有一个等待的例子,可能就是你要找的:
await
inside。然后
承诺到一个变量中(显然,您可以完全省略该变量,直接等待
)等待
在console.log
(async () => {
var promise1 = new Promise(function(resolve, reject) {
resolve('foo');
});
let myval="";
var thenedPromise = promise1.then(function(value) {
myval=value;
console.log(value); // this logs "foo"
});
await thenedPromise; // wait before the promise generated by "then" is resolved
console.log(myval); // logs "foo"
})();
问题内容: 我正在使用函数,这样我的程序就不会一团糟,但我不知道如何将局部变量变成全局变量。 问题答案: 这是两种实现相同目的的方法: 使用参数并返回(推荐) 运行时,将获得以下输出 使用全局变量(永远不要这样做) 现在您将获得:
我使用的是swing,有一个函数(CreateAndShowGUI())可以监听上、左、右键的按下 现在,当我运行程序并按下任意键(向上、向左、向右、向下)时,我可以看到按下的键变量被设置为True。但当我试图在main中访问相同的内容时,按下的这个键的值为false。谁能帮我找出我错的地方吗?
主要内容:局部变量,全局变量,局部变量和全局变量的综合示例在《 C语言形参和实参的区别》中提到,形参变量要等到函数被调用时才分配内存,调用结束后立即释放内存。这说明形参变量的作用域非常有限,只能在函数内部使用,离开该函数就无效了。 所谓 作用域( Scope ) ,就是变量的有效范围。 不仅对于形参变量,C语言中所有的变量都有自己的作用域。决定变量作用域的是变量的定义位置。 局部变量 定义在函数内部的变量称为 局部变量(Local Variable) ,
问题内容: 我试图在量角器上设置一个全局变量,以在所有描述块中使用。 但这返回了以下错误: 我也看了这个问题:量角器angularJS全局变量 所以我试图以这种方式在conf.js中设置变量glob: 仍然有相同的错误。 如何在量角器测试中正确添加全局变量? 问题答案: 可以借助属性从量角器配置文件设置全局变量: 您可以使用规范中访问它。 请参阅参考配置文件。 params对象将直接传递到Prot
问题内容: 这(我的代码的简化版本)不起作用: 为什么?我要访问,因为如果失败,我想在上面记录错误。 递归地调用自身以创建目录列表,因此我担心将整体传递给自身(如中所述)可能会损害性能。 有没有一种方法可以在不传递参数的情况下访问内部?(PHP 5.2.x +) 编辑: 如果代码看起来像这样呢? 问题答案: 您必须将其传递给函数: 或将其声明为global: 如果变量不是全局变量,而是在外部函数中
问题内容: 我了解Python中局部变量和全局变量的概念,但是我只是有一个问题,为什么下面的代码中会出现错误?Python逐行执行代码,因此在读取第5行之前,它不知道a是局部变量。Python尝试执行第5行后,会回退一行并将其标记为错误吗? 问题答案: 设置和测试 为了分析您的问题,让我们创建两个独立的测试函数来复制您的问题: 版画。因此,调用此函数不是问题,而是在下一个函数上: 我们收到一个错误