我明白要访问承诺的值,我将使用"然后"回调附加。
但是,我想知道我如何影响外部上下文?
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
预设的预处理器,则可以使用await
和async
。
有一些警告:
- 您不能直接在顶级运行,它必须在标记为
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;