我在响应中得到空对象可能会对未解决的承诺产生影响



尽管我在承诺之后有一个.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();
}
})

最新更新