承诺并确保准备就绪节点JS

时间:2014-11-29 07:05:56

标签: javascript node.js

我只是想知道在使用promises时是否有人对Node JS中的“确保就绪”模式有任何好的想法。我有类似的东西,但我认为它的主要问题是我认为承诺的.then(cb)实际上会覆盖前一个,而不是链接另一个处理程序......

  function awaitQueueCreation() {
     if (!q._queueURL) return whenQueueCreated;
     else return p.resolve(q._queueURL);
  }

  q.someQueueMethod = function(param) {
       awaitQueueCreation().then(function() {
           // do what this method is supposed to do...
       });
  };

你会如何处理这类事情?

1 个答案:

答案 0 :(得分:2)

在同一个承诺上添加额外的.then()处理程序只会为同一个承诺创建第二个通知。它不会链接到先前的.then()处理程序。它不会覆盖任何先前的.then()处理程序。

因此添加两个.then()处理程序只需在承诺完全填充时依次对两个回调进行排序。

如果第一个.then()处理程序本身返回一个未完成的承诺,则第二个.then()处理程序仍然会立即被调用(它不是"链接"到新的未完成的承诺)。

要链接两个承诺,你必须做这样的事情:

p.then(...).then(...)

p.then(...)
p.then(...)