Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 那么,为什么要返回一个新的承诺,而不是返回OnCompleted返回的承诺_Javascript_Promise_Es6 Promise - Fatal编程技术网

Javascript 那么,为什么要返回一个新的承诺,而不是返回OnCompleted返回的承诺

Javascript 那么,为什么要返回一个新的承诺,而不是返回OnCompleted返回的承诺,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,我想知道为什么,如果then()的oncompleted处理程序返回一个承诺p2,那么为什么then()会返回一个新的承诺p3,而不仅仅是返回p2 例如: let p1 = new Promise(function(resolve, reject) { resolve(42); }); let p2 = new Promise(function(resolve, reject) { resolve(43); }); let p3 = p1.then(function(valu

我想知道为什么,如果then()的oncompleted处理程序返回一个承诺p2,那么为什么then()会返回一个新的承诺p3,而不仅仅是返回p2

例如:

let p1 = new Promise(function(resolve, reject) {
    resolve(42);
});

let p2 = new Promise(function(resolve, reject) {
    resolve(43);
});

let p3 = p1.then(function(value) {
    // first fulfillment handler
    console.log(value);     // 42
    return p2;
});

p3.then(function(value) {
    // second fulfillment handler
    console.log(value);     // 43
});
为什么p1.then()不返回p2而不是做出新的承诺p3?它会有相同的结果。

因为
then()
会在回调运行之前立即返回一个值


它不可能知道您将返回什么。

原因很简单,因为
p3
是在
oncompleted
回调运行之前创建并返回的-
那么
回调总是异步的。它还不知道将来会返回什么价值,因此它为它创造了一个承诺