我希望承诺处理程序可以记录Promise p1
(而不是值" A"),因为console.log
与p1
直接调用。但是,它以某种方式记录了" A"。Promise 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)
});
编辑:我知道呼叫
p1.then((v) => return v))
返回一个新的承诺,该诺言是通过v。
var p2 = new Promise(function(resolve, reject) {
resolve(p1);
});
p2.then(function(v) {
console.log(v)
});
成为
console.log(p1).
由于console.log是直接使用p1调用的,而不是p1的结果。>
var promise = new Promise(function(resolve, reject) {
resolve("B")
})
console.log(promise)
不导致字符串" B"。
edit2:我误解了将解决参数传递给执行人的内容是未完成功能的包装器,这使我感到困惑。查看为什么承诺构造函数需要一个函数,该函数在完成后调用"解决",而"然后"却没有 - 它返回值?有关更多详细信息。
来自MDN文档:
Promise.resolve(value)
返回一个用给定值解决的承诺对象。如果是 值是当时的(即有一个方法),返回的承诺 将"遵循"当时的最终状态;否则 返回的承诺将通过价值实现。通常,如果 您不知道价值是否是诺言,诺言(value) 它取而代
p1
是可行的,所以返回承诺遵循它。
解决另一个诺言的承诺将自动等待另一个诺言的结果。
这是使承诺可连锁的原因(then()
回调中的进一步承诺)。
来自MDN Promise().then()
返回值:
返回已经实现的承诺,当时归还的诺言将其作为其价值作为其价值实现。
如果处理程序函数返回Promise()
,它将自动获取值
我写了一篇文章来解释处理程序功能的返回值更多详细信息
如果处理程序功能...
- 不返回值
var promise = Promise.resolve().then(() => {
// no return;
});
promise.then((value) => {
console.log(promise);
console.log("value =", value);
});
Promise { <state>: "fulfilled", <value>: undefined }
value = undefined
- 不是
Promise
的返回值
var promise = Promise.resolve().then(() => {
return "value";
});
promise.then((value) => {
console.log(promise);
console.log("value =", value);
});
Promise { <state>: "fulfilled", <value>: "value" }
value = value
-
return Promise.resolve()
var promise = Promise.resolve().then(() => {
return Promise.resolve("value");
});
promise.then((value) => {
console.log(promise);
console.log("value =", value);
});
Promise { <state>: "fulfilled", <value>: "value" }
value = value
-
return Promise.reject()
var promise = Promise.resolve().then(() => {
return Promise.reject("value");
});
promise.catch((value) => {
console.log(promise);
console.log("value =", value);
});
Promise { <state>: "rejected", <reason>: "value" }
value = value
- 返回等待
Promise()
var promise = Promise.resolve().then(() => {
return new Promise((resolve, reject) => {
resolve("value");
});
});
promise.then((value) => {
console.log(promise);
console.log("value =", value);
});
Promise { <state>: "fulfilled", <value>: "value" }
value = value
-
throws "error";
var promise = Promise.resolve().then(() => {
throw "error";
});
promise.catch((value) => {
console.log(promise);
console.log("value =", value);
});
Promise { <state>: "rejected", <reason>: "error" }
value = error
参考:
Promise()
处理程序函数返回值,MDN