在异步函数或承诺内设置全局变量的值?

Pra*_*nth 7 javascript node.js promise async-await

首先我想问一下这是否可能,在异步函数或承诺中将值设置为全局变量?

如果是,那么为什么每个可用的教程/网站都在教程中使用 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
Run Code Online (Sandbox Code Playgroud)

Joh*_*ith 6

如果您想访问 的更改版本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"
Run Code Online (Sandbox Code Playgroud)
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"
});
Run Code Online (Sandbox Code Playgroud)

还有一个 await 示例,可能是您正在寻找的示例:

  • 将所有内容包装到立即调用的异步函数中,以便我们可以await在内部使用
  • .then承诺保存到一个变量中(显然,您可以完全await直接省略该变量)
  • await 你面前的那个承诺 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"
})();
Run Code Online (Sandbox Code Playgroud)