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()
回调中返回更多承诺)。
这篇关于将另一个承诺传递给承诺处理程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将另一个承诺传递给承诺处理程序


- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- addEventListener 在 IE 11 中不起作用 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06