Javascript 将定期回调连接到承诺链

Javascript 将定期回调连接到承诺链,javascript,firebase,ecmascript-6,firebase-realtime-database,es6-promise,Javascript,Firebase,Ecmascript 6,Firebase Realtime Database,Es6 Promise,方法中的childAdded回调会在每次添加子对象时调用(也称为多次): 是否有ES6或第三方将其连接到承诺链 childAdded() .then(... 我知道这不是标准的,我知道承诺只会执行一次,这需要每次都产生一个新的承诺。但是,使用Firebase和promises,我就不必在回调中重复启动承诺链: listenToBuildRequests({ childAdded: (value, key) => { cre

方法中的childAdded回调会在每次添加子对象时调用(也称为多次):

是否有ES6或第三方将其连接到承诺链

 childAdded()
    .then(...
我知道这不是标准的,我知道承诺只会执行一次,这需要每次都产生一个新的承诺。但是,使用Firebase和promises,我就不必在回调中重复启动承诺链:

listenToBuildRequests({
            childAdded: (value, key) => {
                createBuildDirectory(appId).
                       then(...
            }
        });
一个非常简单的JSBin示例(没有链接),它不假设复制promise模式,而是使用以下概念:
承诺只能解决一次。由于
on()
可以多次触发,因此无法将其链接到承诺链中

如果您只关心添加的第一个子项,则可以使用
once()
。这只会触发一次,并返回一个承诺

方法中添加的childAdded回调每次都会被调用 添加一个子项(即多次)。有没有离开,用ES6还是a 第三方,将其连接到承诺链

 childAdded()
    .then(...
您可以这样做:

(function () {

    // do some stuff

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

.then ()
.then ()
.then ();
但如合同第25.4条所述:

如果一项承诺没有悬而未决,也就是说,如果它是悬而未决的,那么就说它已经解决了 要么满足,要么拒绝

如果承诺已解决或已“锁定”,则承诺已解决 符合另一个承诺的状态。试图解决或拒绝 一个坚定的承诺是无效的


因此,您不能拒绝或解决已解决的
承诺。因此,无法为
Promise
链的每次运行创建新的
Promise

createBuildDirectory
需要在异步操作完成后返回fulfll(或拒绝)的承诺。
然后(…
您已经编码(一次)仍然有效,因为它在返回的promiseNo上被调用,将承诺链放在侦听器内正是正确的做法。在
listToBuildRequests
之外的承诺代表什么?我感觉它在技术上是可以实现的。承诺在某种程度上是回调的持有者。有没有理由让这些回调无法实现e记住并使用不同的变量重新激发?例如,简化的POC:从技术上讲,每次添加一个孩子时调用一个方法是非常可行的。但这不再是一个承诺。@伙计,因为当你重新激发他们时,你违反了承诺合同。你得到的是一个流,不再是一个承诺。我想我想要所有这些一种方法。承诺的好处是能够重复使用链条。