我需要将json对象返回到我的api。为此,我有一个执行一些请求并应返回结果的模块。我的问题是掌握诺言概念并执行它。
server.js
app.get('/users', function(req, res){
request.getUsers()
.then(function(users){
console.log(users);
res.contentType('application/json');
res.send(JSON.stringify(users));
})
.catch(function(){
console.log(users);
});
});
module.js
exports.getUsers = function(){
var params = {search_string:""};
var users = [];
return new Promise(function(resolve, reject){
var result = connection.Users.get(params, function(error,response)
{
var user = [];
for(let i = 0; i < response.data.length; i++)
{
user = response.data;
}
users.push({user});
});
if(result != null)
{
console.log(result);
resolve(result);
}
else
{
reject(new Error('Try Again'));
}
});
}
当我运行服务器时,出现typeError:期望有一个函数,但得到了[object object]
我没有真正弄错。
如何使用promise将数组从模块返回到API?
编辑:
app.get('/users', function(req, res){
request.getUsers()
.then(function(users){
console.log(users);
res.contentType('application/json');
res.send(JSON.stringify(users));
})
.catch(function(){
console.log("not resolved");
});
});
我现在的问题实际上是,即使在/ users端点发出任何请求之前,我也正在获取.catch,我不知道为什么。
在module.js中,您使用了new Promise()
构造函数,但输入参数应该是一个函数,而不是一个对象,因此要解决此问题,请使用:
return new Promise(function(resolve, reject) {
var result = connection.Users.get(params, function(error,response)
...
});
请注意,它不是new Promise({function(...)
,但new Promise(function(...)) ...
在此处了解更多信息:https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise
编辑:我已修改您的代码以解决第二个问题:
exports.getUsers = function(){
var params = {search_string:""};
var users = [];
return new Promise(function(resolve, reject){
var result = connection.Users.get(params, function(error,response) {
if(error || !response)
{
// report error
reject(new Error('Try Again'));
}
else
{
//process response
var user = [];
for(let i = 0; i < response.data.length; i++)
{
user = response.data;
}
users.push({user});
// report success
resolve(users);
}
});
}
您需要打电话resolve
或reject
在里面connection.Users.get(params, function(error,response) {
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句