javascript 链接承诺澄清

javascript chaining promises clarification

我正在尝试理解 javascript 中承诺的概念。

我看过这段代码:

new Promise(function(res,rej) {
    res("aaa");
})
.then(function(result) {
    console.log(result);
    return "bbb";
})
.then(function(result) {
    console.log(result);
    return "ccc";
})
.then(function(result) {
    console.log(result);
});

它打印:

 aaa

 bbb

 ccc 

到控制台日志。

几个问题:

  1. then()方法第一个参数是一个将运行作为resolve()方法的函数吗?

  2. then() 方法也是 return 一个值,它是一个承诺,这个承诺与它链接到的承诺(它的父级)是相同的承诺 只有它的resolve()方法的值是then()?

    [=里面的resolve()方法的值return 50=]
  3. 这个承诺是:

    var myPromise = new Promise(function(res,rej) {
        res("aaa");
    })
    .then(function(result) {
        console.log(result);
        return "bbb";
    })
    

是否等同于下面这个承诺?

var myPromise = new Promise(function(res,rej) {
    res("bbb");
})

此外,当 then() 接受承诺时会发生什么?

就像这个例子一样?

var firstMethod = function() {
   var promise = new Promise(function(resolve, reject){
      setTimeout(function() {
         console.log('first method completed');
         resolve({data: '123'});
      }, 2000);
   });
   return promise;
};


var secondMethod = function(someStuff) {
   var promise = new Promise(function(resolve, reject){
      setTimeout(function() {
         console.log('second method completed');
         resolve({newData: someStuff.data + ' some more data'});
      }, 2000);
   });
   return promise;
};

var thirdMethod = function(someStuff) {
   var promise = new Promise(function(resolve, reject){
      setTimeout(function() {
         console.log('third method completed');
         resolve({result: someStuff.newData});
      }, 3000);
   });
   return promise;
};

firstMethod()
   .then(secondMethod)
   .then(thirdMethod);
  1. then方法的第一个参数是解析函数,第二个参数是拒绝函数。

var resolvedPromise = new Promise(function(res,rej){ res({data: 7}) });
var rejectedPromise = new Promise(function(res,rej){ rej('error!!!!') });
resolvedPromise.then(function(res){ console.log('resolved:' + JSON.stringify(res)); }, function (err){ console.log('rejected:' + err); });
rejectedPromise.then(function(res){ console.log('resolved:' + JSON.stringify(res)); }, function (err){ console.log('rejected:' + err); });

  1. then 方法 return 是一个基于前一个承诺的 return 类型的承诺。

var promise = new Promise(function(res,rej){ res({data: 7}) });
promise.
then(function(res){ console.log(res); return res.data; }).
then(function(res){ console.log(res); return res + 1; }).
then(function(res){ console.log(res);});

  1. 没有。第一个代码将记录 "aaa" 和 return 带有 "bbb" 的承诺,而第二个代码将 return "bbb" 不记录 "aaa";