Lol*_*ums 6 javascript promise ecmascript-6 es6-promise
如果我们知道 aPromise肯定已解析,那么我们如何访问该值,如果不能,为什么不呢?
let a = Promise.resolve(123);
console.log(a.value); // ???
Run Code Online (Sandbox Code Playgroud)
以下不起作用 - 它打印“First, Last, 123”
console.log("First");
Promise.resolve(123).then(console.log);
console.log("Last");
Run Code Online (Sandbox Code Playgroud)
我问如何同步获取已解决的值Promise,如果不可能,为什么不呢?
不,这是不可能的。这是设计使然。
Promise A+ 规范旨在作为一种简单、一致的方式来处理异步操作。限制之一是,将新的回调传递给then()已解决的 Promise 将始终在事件循环中稍后的时间点上执行,因此事情是一致的。
添加第二种方法来检查承诺结果并非不可能。这样做可能很容易,但是将其添加到规范中至少存在两个问题:
then()功能。Promise 和异步操作对于人们来说很难理解。我每天都会在这里看到关于承诺而不是“得到”它的问题。如果将访问承诺结果的非异步方式添加到默认承诺中,我想这将是一个更大的数量。尝试并强制执行“正确的方式”做事是件好事。
然而,这个决定并不是简单地为你做出的。你并没有被困在那里。您可以非常轻松地构建自己的具有此功能的 Promise 版本,并且仍然可以与现有 Promise 一起使用。只要您的对象具有then()根据 Promises/A+ 运行的函数,您就可以对对象的其余部分执行任何您想要的操作。
| 归档时间: |
|
| 查看次数: |
13737 次 |
| 最近记录: |