【发布时间】:2016-01-28 02:16:56
【问题描述】:
我在 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)
我在摆弄时注意到的一件事是,并非所有错误都被 .catch() 捕获。我将 Javascript Try Catch 放在小提琴中以证明这一点,但这确实是一个单独的问题。
鉴于我在遇到问题的基础上遇到了问题,我想知道我的 Node 安装是否有问题,所以重新安装了 Node 并删除并重新安装了我的 node_modules。我仍然没有任何进展。
有人在 Node 中使用新的 Promise 语法吗?请问有什么建议吗?
【问题讨论】:
-
也许你的node版本没有实现promise
.catch函数,但是浏览器实现了。如果不了解您的节点设置,很难说。要尝试的一件事是引入一个单独的库来处理承诺。蓝鸟是一种流行的。尝试执行npm install bluebird,然后在使用promise 的文件顶部Promise = require("bluebird")。 -
你非常可能是对的@AlexKlibisz。你能提供这个答案,以便我投票吗?
-
我在我的代码中广泛使用了 Promise,并带有“es6-promise”,所以我认为这不是问题。
标签: javascript node.js firebase