在其上下文之外获得承诺价值



我明白要访问承诺的值,我将使用"然后"回调附加。

但是,我想知道我如何影响外部上下文?

let outsideVar = 0;
promiseA.then(value => {
    outsideVar = 1;
})
console.log(outsideVar); //0

您可以看到,我想将外部变为1

[编辑]这个问题是要查看承诺是否会影响其之外的全局变量,以及是否有可能这样做。

不幸的是,这是不可能的。

您的问题没有改变您的outsideVar,而是您正在检查它。

Promise是异步,因此您需要等到完成才能输出。

let outsideVar = 0;
promiseA.then(value => {
     outsideVar = 1;
}).then(() => console.log(outsideVar));

开始使用Promise后,您需要继续编写异步代码。

如果您使用的是像babel一样带有es2017预设的预处理器,则可以使用awaitasync

有一些警告:

  • 您不能直接在顶级运行,它必须在标记为async的函数中。
  • 该代码仍在异步运行,它看起来同步。注意这种差异或奇怪的事情会发生。

这是一个示例:

let outsideVar = 0;    
const doSomething = async () => {
    await Promise.resolve(); // something that is async
    outsideVar = 1;
};
await doSomething();
console.log(outsideVar);

`

let ousideVar = 0;
function promiseA(){
	return new Promise( function(resolve, reject){
		resolve();
	})
}
promiseA().then(function(){
	ousideVar = 1;
  //when promise resolved
  console.log(ousideVar) // 1  
})
console.log(ousideVar) // 0

`当您的诺言解决您的"户外事实"时示例:

let outsideVar = 0;
promiseA().then(value => {
outsideVar = 1;
})
console.log(outsideVar);

当Promisea称其为返回回调时,您的价值替换为新的回调
outsideVar = 1;

最新更新