如何使用promise将数组从模块返回到API?异步功能和承诺-Node.js

埃泽韦多

我需要将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,我不知道为什么。

sel

在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);
         }

    });

}

您需要打电话resolvereject在里面connection.Users.get(params, function(error,response) {

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章