在其上下文之外访问Promises值

时间:2017-06-05 17:31:22

标签: javascript ecmascript-6

我理解访问Promise的值,我将使用“then”回调附加到它。

但是,我想知道如何影响它之外的背景?

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

如您所见,我想将outsideVar更改为1

[编辑]这个问题是看看承诺是否会影响它之外的全局变量,以及是否有可能做到这一点。

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

2 个答案:

答案 0 :(得分:4)

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

Promise是异步的,所以你需要等到它完成输出。

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

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

如果你使用像Babel这样预处理器await预设,你可以使用asynces2017

但他们有一些警告:

  • 您不能直接在顶层运行它,它必须位于标记为async的函数中。
  • 代码仍然是异步运行的,它只是看起来是同步的。要意识到这种差异,否则会发生奇怪的事情。

以下是示例:

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

await doSomething();
console.log(outsideVar);

答案 1 :(得分:0)

`

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

`当你的承诺解决了你的“outsideVar”时,用当时的新值替换 例如:

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

当promiseA调用它时,它返回一个回调,并将您的值替换为新值 outsideVar = 1;