gpt4 book ai didi

javascript - Nodejs 中的 Firebase Web 2.4.0 Promises

转载 作者:行者123 更新时间:2023-11-30 09:53:56 24 4
gpt4 key购买 nike

我在 Node 应用程序中遇到来自 Firebase Web 的错误回调的一些问题。

最初的问题是来自 .set 的错误回调显然没有在我预期的时候触发。

在调试过程中,我将 Firebase npm 模块升级到最新的 2.4.0(NodeJS 0.10.28),然后注意到异步调用有一个新的 Promise 语法。

我没有找到使用新语法的示例,但制作了一个 fiddle它似乎按照我在浏览器中预期的方式工作。

var fb = new Firebase("https://katowulf-examples.firebaseio.com/");

// monitors changes and updates UI
try {
fb.child('sorted_widgets').orderByChild('name').equalTo('one').once('value').then(handleSuccess).catch(handleError)
fb.child(undefined).once('value').then(handleSuccess).catch(handleError)
fb.child('sorted_widgets').set(undefined).then(handleSuccess).catch(handleError)

} catch (err) {
console.error('Caught an error', err)
}

function handleSuccess(snap) {
console.log('snap: ', snap.val())
}

function handleError(err) {
console.log('error:', err)
}

我现在尝试在我的 Node 应用程序中使用该语法并收到此错误:

TypeError: Object #<nb> has no method 'catch'
at myFunction (/node_scripts/my_script.js:514:19)
at c (/node_modules/firebase/lib/firebase-node.js:238:58)
at /node_modules/firebase/lib/firebase-node.js:199:710
at ec (/node_modules/firebase/lib/firebase-node.js:52:165)
at ac (/node_modules/firebase/lib/firebase-node.js:31:216)
at bc (/node_modules/firebase/lib/firebase-node.js:30:1259)
at Ii.h.Ib (/node_modules/firebase/lib/firebase-node.js:218:287)
at Qh.h.Jd (/node_modules/firebase/lib/firebase-node.js:185:251)
at Eh.Jd (/node_modules/firebase/lib/firebase-node.js:175:364)

我在 fiddling 中注意到的一件事是并非所有错误都被 .catch() 捕获。我将 Javascript Try Catch 放在 fiddle 中进行演示,但这实际上是一个单独的问题。

鉴于我遇到了一个接一个的问题,我想知道我的 Node 安装是否有问题,所以重新安装了 Node 并删除并重新安装了我的 node_modules。我仍然没有取得任何进展。

有没有人在 Node 中使用新的 Promise 语法?有什么建议吗?

最佳答案

我认为发生了 3 件事:

  1. node v0.10.28 没有内置 Promise 实现。
  2. firebase 模块捆绑了一个与 Promise/A+ 兼容的实现,它在尚未定义一个实现时使用。
  3. 我们随 firebase 一起提供的实现是纯 Promise/A+ 实现,不包括 .catch()

但是 .catch() 非常有用,虽然它不是 Promise/A+ 的一部分,但它是半标准的,所以我们计划在即将到来的版本中继续将它添加到我们捆绑的 Promise 实现中发布,这应该可以解决您的问题。

在此期间,您可以执行以下任一操作:

  • 使用 .then(null, function(err) { ... }) 而不是 .catch(function(err) { ... })<
  • 将合适的 Promise 实现导入到您的环境中。例如。 global.Promise = require('rsvp').Promise;
  • 升级到 Node v0.12.x 或更新版本,它带有内置的 Promise 实现(支持 .catch())。

关于javascript - Nodejs 中的 Firebase Web 2.4.0 Promises,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34964342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com