我试图返回一个具有特定结构的对象,但我无法返回该对象。
正如您在代码中看到的那样,如果我在内部打印,它会打印数据,但如果我在外部打印,则为空...为什么?
我怎样才能返回对象部分?
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 resolve
或 reject
来检查数据。具体来说,您应该只在 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/