Javascript - 如何用 promise 返回对象

标签 javascript node.js express

我试图返回一个具有特定结构的对象,但我无法返回该对象。

正如您在代码中看到的那样,如果我在内部打印,它会打印数据,但如果我在外部打印,则为空...为什么?

我怎样才能返回对象部分?

var parts = [];
var part = [];
var articles = [];

part.push(request.query("SELECT u_order, u_familia, u_part, u_type FROM u_part (nolock) where u_order <'92' and u_order <> '100'"));

return Promise.all([Promise.all(part)]).then(function(listOfResults)
{
  for(var i=0; i<listOfResults[0][0].length; i++)
  {
    articles.push(request.query("SELECT st.u_posic, sc.ref, sc.qtt, sc.design FROM st INNER JOIN sc ON st.ref = sc.ref where sc.ststamp ='"+stamp+"' and st.u_posic = '"+listOfResults[0][0][i].u_order+"'"));
    //articles.push(request.query("SELECT ststamp, ref, design FROM st (nolock) WHERE u_posic = '"+listOfResults[0][0][i].u_order+"'"));

    Promise.all([Promise.all(articles)]).then(function(listOfArticles)
    {

      for(var j=0; j<listOfResults[0][0].length; j++)
      {
        parts.push({
          u_order: listOfResults[0][0][j].u_order,
          u_familia: listOfResults[0][0][j].u_familia,
          u_part: listOfResults[0][0][j].u_part,
          u_type: listOfResults[0][0][j].u_type,
          articles: listOfArticles[0][j-1]
        });

        console.log(parts); HERE THE OBJECT HAD DATA
      }


    });

  }
  console.log(parts); BUT HERE IS EMPTY

}).catch(function(err)
{
    console.log(err);
});

谢谢。

最佳答案

Promises 的重点是异步的。您需要等待您的 Promise resolvereject 来检查数据。具体来说,您应该只在 Promise.then() 方法中对 Promise 的返回值执行任何操作,该方法会在 Promise 完成执行。从 Promise 中更改存在于 之外的变量,就像您通过调用 parts.push() 所做的那样,是一种不好的做法。您应该在 promise 中返回零件,然后在最终的.then() 回调中,您应该对零件 执行任何需要的操作。

类似于:

Promise.all(part).then(makeAllQueries).then(doSomethingWithQueryResults);

只有当您的最终 .then 回调运行时,您才能确定您确实拥有数据。

此外,执行 Promise.all([Promise.all(part)]) 对您没有任何作用,因为您只是将返回的数组包装在另一个数组级别中。

关于Javascript - 如何用 promise 返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43099621/

相关文章:

javascript - 如何将月/年的对象数组值拆分为月份和年份等两个值?

javascript - 为什么我的 forloop + if/else 控制台会记录一个未定义的值

javascript - Claudia JS 框架中请求对象未正确解析

Javascript - 选择随机数组 IF 与当前数组相同,然后选择另一个

javascript - 如何在 MongoDB 的 V8 引擎中创建可通过 db.eval 访问的全局对象?

node.js - 数据绑定(bind)到 Node.js 中的 ejs 文件不起作用

node.js - 如何使用 zmq (zeromq) 在两个 NodeJS 服务器之间发送多个请求并路由异步响应?

javascript - 使用 Express 从 Javascript 向 Node.js 发送/接收数据

javascript - 了解 Passport 、序列化失败、401 错误

express - 类型错误 : Failed to execute 'compile' on 'WebAssembly' : Incorrect response MIME type. 预期为 'application/wasm'