gpt4 book ai didi

javascript - 明示 promise 行不通

转载 作者:行者123 更新时间:2023-12-03 10:18:51 27 4
gpt4 key购买 nike

我对 Promise 还很陌生,我认为我没有正确理解它,因为我在代码中尝试它但没有成功。

我在 NodeJS 上有一个服务器,使用 Express 库和 express-promise

var express = require('express');
var app = express();
app.use(require('express-promise')());

然后我正在处理ajax查询:

var promise = function() {
for(var query in req.query ){
console.log( 'query: ', query );
switch( query ){
case 'getobserved':
results.observedTags = getObserved();
break;
...
}
}
};

getObserved 正在从 Firebase DB 获取数据

var getObserved = function() {
var observedTags = dbRef.child('observedTags');
observedTags.on('value', function(snap) {
var allObservedItems = snap.val();
var list = [];
for(var ii in allObservedItems ){
list.push( allObservedItems[ii].name );
}
return list;
});
};

最后我尝试通过以下方式向客户端发送响应:

promise.then( res.send( results ), someRejectedMethod );

我在控制台中得到的是:

TypeError: undefined is not a function
at d:\wamp\www\soz2\server.js:100:13

可能方法“promise”未定义。我不确定我是否错误地使用了express-promise,或者只是我对整个 promise 缺乏了解。需要一些提示,请

最佳答案

Probably method "promise" is undefined.

不,promise 函数似乎已定义。只是它是一个函数,而不是一个 Promise 对象,并且没有 .then 方法。

I am not sure if I use express-promise wrong

是的。据我了解their docs ,它似乎所做的就是让 res.sendres.jsonres.render 接受 Promise 或包含 Promise 的对象,这然后递归扩展并等待。

or it's just my lack of knowledge about whole promises.

这也是。我推荐general promise resources作为了解 Promise 的切入点。

首先,您必须promisify您的 Firebase 方法,以便 getObserved 确实返回一个 promise 。 (目前,它似乎失败了,因为您尝试 return from an async callback )。如果您还没有使用 Promise 库,您可能必须选择一个。

然后,在您的 route 您可以像这样使用它

for (var query in req.query) {
console.log('query: ', query);
switch(query) {
case 'getobserved':
results.observedTags = getObserved(); // a promise
break;

}
}
res.json( result ); // here, express-promise does some magic

不需要 var Promise = function() { 行。您也可以废弃 promise.then( res.send( results ), someRejectedMethod ); ,因为express-promise 确实会为您处理这个问题。如果您没有使用它,您可以使用类似的方法显式地完成它

var promise = getObserved();
promise.then(function(list) {
res.json({observedTags: list});
}, someRejectedMethod);

关于javascript - 明示 promise 行不通,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29735882/

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