Javascript 将定期回调连接到承诺链
方法中的childAdded回调会在每次添加子对象时调用(也称为多次): 是否有ES6或第三方将其连接到承诺链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()
.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:从技术上讲,每次添加一个孩子时调用一个方法是非常可行的。但这不再是一个承诺。@伙计,因为当你重新激发他们时,你违反了承诺合同。你得到的是一个流,不再是一个承诺。我想我想要所有这些一种方法。承诺的好处是能够重复使用链条。