【发布时间】:2018-10-17 18:21:53
【问题描述】:
我想将解析的返回值推送到解析之外的变量catWithItems。在解析中 catWithItems 可以按预期工作,但是当我在循环外控制台登录 catWithItems 时,它会返回一个空数组。
function categoriesSearch(req, res, next) {
let categories = req.batch_categories;
let catWithItems = [];
_.forEach(categories, (category) => {
return new Promise(resolve => {
pos.categoriesSearch(req.tenant, category.id)
.then(item => {
if(item) category.items = item[0];
return category;
})
.then(category => {
catWithItems.push(category);
console.log(catWithItems); //this is works inside here
return resolve(catWithItems);
});
});
});
console.log(catWithItems); //doesn't work returns empty array
res.json({categoryWithItems: catWithItems });
}
这是 pos.categoriesSearch 模块。它对 square 进行 api 调用。(按预期工作)
function categoriesSearch(tenant, category) {
let search_items_url = ${tenant.square.api.v2}/catalog/search,
apiKey = tenant.square.api.key,
payload = {
"object_types": ["ITEM"],
"query": {
"prefix_query": {
"attribute_name": "category_id",
"attribute_prefix": category
}
},
"search_max_page_limit": 1
},
conf = config(search_items_url, apiKey, payload);
return request.postAsync(conf)
.then(items => {
return items.body.objects;
});
}
【问题讨论】:
-
只是一个猜测,有一个方法说..
foo()监听categoriesSearch(...).then((data) => res.json({categoryWithItems: data });)。所以在 categoriesSearch() 中不需要res.json()
标签: javascript node.js foreach promise lodash