Javascript – 如何用promise返回对象

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

正如你可以在代码中看到,如果我打印承诺它打印数据,但如果我打印外面是空的…为什么?

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

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的整个观点是asynchronous的。 您需要等待您的承诺resolvereject检查数据。 具体来说,你只能在Promise.then()方法中做Promise.then()方法的任何事情,只要Promise结束执行就运行。 改变在Promise 外部存在的variables,就像调用parts.push()是一个不好的做法。 你应该在你的诺言中return parts ,然后在最后的.then()callback中,你应该做任何需要的parts

就像是:

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

当你最后的.thencallback运行时,你只能确定你实际上数据。

另外,做Promise.all([Promise.all(part)])对你没有任何帮助,因为你只是将你的返回数组封装在一个数组中。