Passing another promise to a promise handler(将另一个承诺传递给承诺处理程序)
问题描述
我希望Promise处理程序记录Promisep1
(不是值"A"),因为console.log
是用p1
直接调用的。然而,它不知何故记录了"A"。承诺p1
如何在不被调用的情况下自动解析为"A"?例如,console.log(p1)
并不像预期的那样直接输出"A"。幕后发生了什么事吗?
数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
var p1 = new Promise(function(resolve, reject) {
resolve("A");
});
var p2 = new Promise(function(resolve, reject) {
resolve(p1);
});
p2.then(function(v) {
console.log(v)
});
编辑:我理解呼叫
p1.then((v) => return v))
返回一个用v值实现的新Promise,除非我在这里严重遗漏了一些东西,否则第二个Promise构造函数中的"p1"引用应该直接传递给sole.log,从而导致块
var p2 = new Promise(function(resolve, reject) {
resolve(p1);
});
p2.then(function(v) {
console.log(v)
});
成为
console.log(p1).
由于使用p1而不是p1的结果直接调用console.log,因此不应像打印另一个程序那样将p1解析为值"A"
var promise = new Promise(function(resolve, reject) {
resolve("B")
})
console.log(promise)
不会产生字符串"B"。
EDIT2:我有一个误解,以为传递给Executor的Resolve参数是未完成函数的包装,这给我带来了极大的困惑。有关详细信息,请查看Why does the Promise constructor require a function that calls 'resolve' when complete, but 'then' does not - it returns a value instead?。
推荐答案
将一个承诺解析为另一个承诺将自动使其等待另一个承诺的结果。
这就是承诺可链接的原因(在then()
回调中返回更多承诺)。
这篇关于将另一个承诺传递给承诺处理程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将另一个承诺传递给承诺处理程序


基础教程推荐
- 在for循环中使用setTimeout 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 动态更新多个选择框 2022-01-01