2

方法内的childAdded回调被调用,那么,每次加一个孩子(又名多次)连接到一个承诺链:重复出现回调

 listenToBuildRequests({ 
      childAdded: (value, key) => { 
       console.log('value, key -> ', value, key); 
      } 
     }); 

有没有去,用ES6或第三党,连接到承诺链?

childAdded() 
    .then(... 

我知道这不是标准的,我知道承诺运行一次,这将需要每一次产生一个新的承诺。然而,随着火力地堡工作,并承诺会救我的回调内反复启动一个承诺链的需要:

listenToBuildRequests({ 
      childAdded: (value, key) => { 
       createBuildDirectory(appId). 
         then(... 
      } 
     }); 

一个很简单的JSBin例(无链接),这是不承担复制承诺模式,而是玩与概念: http://jsbin.com/mekoza/edit?js,console

+0

'createBuildDirectory'需要返回在其异步操作完成后履行(或拒绝)的承诺。 'then(...)'你编码(一次)仍然有效,因为它调用了返回的承诺 – traktor53

+0

不,把promise链放在listener中是正确的做法。'listToBuildRequests '代表? – Bergi

回答

1

承诺只能解决一次。由于on()可以多次启动,因此不能链接到承诺链。

如果您只关心添加的第一个孩子,则可以使用once()。这只火一次,确实退货承诺。

+0

我有一种感觉,它可以在技术上完成。一个承诺是一个回调的持有者。是否有一个原因,为什么这些回调不能被记住,并用不同的变量重新触发? – Guy

+0

例如,一个简化POC:http://jsbin.com/mekoza/edit?js,console – Guy

+2

从技术角度来说,每次添加孩子时都会调用一种方法,但这不会成为一种承诺。 –

0

该方法内的childAdded回调被调用,好吧,每次都添加一个子项(又称多次) 。 ES6或 第三方有没有将其连接到承诺链?

你可以这样做:

(function() { 

    // do some stuff 

    return Promise.resolve("pass this value on to .then") 
})() 

.then() 
.then() 
.then(); 

但条款规定的ECMAScript 2016 25.4:

一个承诺被认为是解决如果没有挂起,如果是IE是 要么完成或拒绝。

承诺如果已结算或者已被锁定为“ ”以匹配另一承诺的状态,则该承诺将被解决。试图解决或拒绝 解决的承诺不起作用。

因此,一旦解决了问题,您不能拒绝或解决Promise。因此,对于Promise链的每次运行,无法创建新的Promise

+0

您的代码段有语法错误 – Bergi

+0

感谢您指出最后缺少的分号。 – rabbitco

+0

这不是一个错误。 – Bergi