【发布时间】:2020-04-16 01:14:43
【问题描述】:
首先我想问一下这是否可能,在异步函数或promise中为全局变量设置值?
如果是,那么为什么每个可用的教程/网站都在教程中使用 console.log(results) 但从不使用它将其分配给变量。
例如:
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
【问题讨论】:
-
你知道
//this logs blank在//this logs "foo"之前被调用是因为promise造成的延迟吗? -
是的,我非常清楚这一点。我的问题是如何为变量 myval 赋值(假设 myval 是全局的)。
-
代码不是问题,但解释才是问题。如果您需要将全局变量设置为 Promise 中的某些内容,有两种方法可以处理此问题 - 等待一些随机时间,这显然不是 100% 正确,因为它可能会或可能不会起作用。取决于 promise 需要多长时间来解决 - 如果您真的需要全局变量,请确保在 promise 链中使用它们。因此,在您的示例中,不要在承诺链之外进行控制台日志,而是将其作为下一个然后使用。
标签: javascript node.js promise async-await