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)
如果您想访问 的更改版本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)