javascript链接承诺澄清

时间:2016-07-07 12:16:30

标签: javascript promise angular-promise q

我正试图用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()方法1'st参数是一个将作为resolve()方法运行的函数?

  2. then()方法还返回一个值,它是一个promise,这个promise是与它链接到的那个(它的父元素)相同的承诺只有它的值{{ 1}}方法是resolve() resolve()方法返回的值?

  3. 是这个承诺:

    then()
  4. 是下面这个承诺的等同物吗?

    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()

1 个答案:

答案 0 :(得分:3)

  1. then方法的第一个参数是解析函数,第二个参数是拒绝函数。
  2. 
    
    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方法根据前一个promise的返回类型返回一个promise。
    2. 
      
      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"并用" bbb"返回一个承诺而第二个将返回" bbb"没有记录" aaa";