将定期回调连接到承诺链

时间:2016-10-04 23:54:21

标签: javascript firebase ecmascript-6 firebase-realtime-database es6-promise

每次添加子项(也就是多次)时,都会调用方法中的childAdded回调:

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

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

 childAdded()
    .then(...

我知道它不标准,我知道承诺会一次性运行,这将需要每次都产生新的承诺。然而,与Firebase合作并承诺它将使我无需在回调中重复启动承诺链:

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

一个非常简单的JSBin示例(没有链接),它不假设复制promise模式,而是使用概念: http://jsbin.com/mekoza/edit?js,console

2 个答案:

答案 0 :(得分:1)

承诺只能解决一次。由于{{1}}可以多次触发,因此无法将其链接到承诺链中。

如果您只关心添加的第一个孩子,则可以使用{{1}}。这只会触发一次而 会返回一个承诺。

答案 1 :(得分:0)

  

每次调用方法中的childAdded回调   添加一个孩子(也就是多次)。有没有ES6或一个   第三方,将它连接到承诺链?

你可以这样做:

(function () {

    // do some stuff

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

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

但正如ECMAScript 2016第25.4条所述:

  

如果一项承诺没有待决,即如果是,那么该承诺将被解决   要么完成要么被拒绝。

     

如果承诺已解决或已被“锁定”,则承诺将得到解决   匹配另一个承诺的状态。试图解决或拒绝   已解决的承诺无效。

因此,一旦结算,您就无法拒绝或解决Promise。因此,无法为Promise链的每次运行创建新的Promise