kua*_*uan 13 javascript promise es6-promise
我希望promise处理程序能够记录promise p1(而不是值"A"),因为直接console.log调用它p1.但是,它以某种方式记录"A".承诺如何在p1没有被调用的情况下自动解析为"A"?例如,console.log(p1)不按预期直接输出"A".幕后会发生什么事吗?
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)
});Run Code Online (Sandbox Code Playgroud)
编辑:我明白,打电话
p1.then((v) => return v))
Run Code Online (Sandbox Code Playgroud)
返回一个用值v实现的新promise.除非我在这里严重遗漏了某些东西,否则第二个promise构造函数中的"p1"引用应该直接传递给console.log,从而产生块
var p2 = new Promise(function(resolve, reject) {
resolve(p1);
});
p2.then(function(v) {
console.log(v)
});
Run Code Online (Sandbox Code Playgroud)
变得
console.log(p1).
Run Code Online (Sandbox Code Playgroud)
由于使用p1直接调用console.log,而不是p1.then(...)的结果,因此p1不应该像打印另一个程序一样解析为值"A"
var promise = new Promise(function(resolve, reject) {
resolve("B")
})
console.log(promise)
Run Code Online (Sandbox Code Playgroud)
不会产生字符串"B".
编辑2:我有一种误解,认为传递给执行程序的resolve参数是未实现函数的包装器,这引起了大量的混淆.检查为什么Promise构造函数需要一个在完成时调用'resolve'的函数,但'then'却没有 - 它返回一个值而不是?更多细节.
Que*_*tin 12
从MDN文档:
Promise.resolve(值)
返回使用给定值解析的Promise对象.如果该值是一个可设置的(即具有then方法),则返回的promise将"跟随"那个可能的,采用其最终状态; 否则返回的承诺将通过该值来实现.通常,如果您不知道某个值是否为promise,则Promise.resolve(value)代替它并将返回值作为promise.
p1 是可以的,所以回报承诺遵循它.
| 归档时间: |
|
| 查看次数: |
2797 次 |
| 最近记录: |