蓝鸟承诺和回调

时间:2015-12-02 14:11:40

标签: javascript promise bluebird

我想知道为什么BlueBird希望在承诺的回调中采取行动。像:

var pr = new Promise(function(successCb, errorCb){
  // do what you need
  successCb();
});
pr.then(function(){
  // react to promise resolved
});

我应该有类似的流程:

var pr = new Promise;

// do what you need
pr.resolve();
pr.then(function(){
  // react to promise resolved
});

我不明白为什么避免回调的模式要我使用回调。这是出于特定原因需要吗?

2 个答案:

答案 0 :(得分:0)

Promise不会避免回调,但(除其他外)会阻止回调地狱,并使错误捕获更容易。

    doAsync1(params, function(err, res) {
      if (err) {
         throw new Error(err);
      }
      doAsync2(res1, function(err, res2) {
        if (err) {
           throw new Error(err);
        } 
        doAsync3(res2, function(err) {
           if (err) {
             throw new Error(err);
           }
           // then do stuff
        }
      }
    }

......将在宣传的土地上写出来:

  doAsync1(params)

  .then(function(res1) {
    return doAsync2(res1);
  })

  .then(function(res2) {
    return doAsync3(res2);
  })

  .then(function(res3) {
    // Do something
  })

  .catch(err) {
     throw new Error(err);
  });

您可以找到more details here

编辑:所以你是对的:在同步代码中,因此没有回调,Promise是无用的。

答案 1 :(得分:0)

回调是由另一个函数调用的任何函数,它将第一个函数作为参数。它在该函数内的某个指定点“被回调”。 当我们谈论javascript时,我们一直在处理回调。

你无法避免回调,它们是节点js库的核心。它们实现了跨应用程序的平衡,无阻塞的控制流,它们是几乎所有promise库的基础。在你的代码中,传递给它的函数只是一个回调函数。

Promise实际上是一种不同的风格,可以实现与回调相同的效果。这里的优点是抽象 使用回调非常愉快。

您可以浏览这些链接并更好地掌握这些概念:

  1. You are missing the whole point of promises

  2. Why move to promises

  3. Inside promise libraries