尽管我在承诺之后有一个.then()
,但它在解决之前就返回了。请帮我理解原因。非常感谢。
此文件执行以下操作:
- 获取每个UPC的数据
- 将数据存储在数据库中
- 调用一个修改数据的函数
- 返回修改后的数据
const upcHelperMethods = require('./upc-helper-methods');
const UpcsService = require('./upc-service');
const AddByUpcService = {
addProducts(upcsArray, db, next) {
return Promise.all(upcsArray.reduce((acc, el) => {
acc = acc.concat(apiGeniusApiService.getItemData(el, next))
return acc
}, []))
.then(response => {
return response.map(data => {
console.log(data)
return UpcsService.insertUpc(db, data)
.then((results) => {
return upcHelperMethods.extractData(data)
})
.catch(next)
})
})
.catch(next)
}
}
module.exports = AddByUpcService
以下代码与上述文件通信:
upcsRouter
.route('/hard-data')
.post(jsonParser, (req, res, next) => {
AddByUpcService.addProducts(req.body.data, req.app.get('db'), next)
.then(async (results) => {
return res.status(201).json(results)
}).catch((err) => {
return res.status(400).end();
})
})
如何在发送响应之前等待results
解决?非常感谢。
我在将results
记录到控制台时得到这个:
[ Promise { <pending> }, Promise { <pending> } ]
使用async/await,这样代码就可以等待,直到收到响应后再转到下一行。
const upcHelperMethods = require('./upc-helper-methods');
const UpcsService = require('./upc-service');
const AddByUpcService = {
async addProducts(upcsArray, db, next) {
try {
const response = await Promise.all(upcsArray.reduce((acc, el) => {
acc = acc.concat(apiGeniusApiService.getItemData(el, next))
return acc
}, []));
return response.map(data => {
console.log(data)
const results = await UpcsService.insertUpc(db, data);
return upcHelperMethods.extractData(data);
});
} catch (error) {
next;
}
}
}
module.exports = AddByUpcService
upcsRouter
.route('/hard-data')
.post(jsonParser, async(req, res, next) => {
try {
await AddByUpcService.addProducts(req.body.data, req.app.get('db'), next);
return res.status(201).json(results);
} catch (error) {
return res.status(400).end();
}
})