【发布时间】:2019-01-27 01:25:29
【问题描述】:
我有一条 express 路由,我想在其中执行一堆异步操作,然后在满足某些条件时将一些数据添加到数据库中。到目前为止,它看起来像这样(index.js):
router.post('/distributor/:id/upload', upload.single('file'), function
(err,req, res, next ) {
if (err) {
console.log(req);
console.log(req.file);
console.error(err);
return res.sendStatus(500);
}
next()
}, function (req, res, next) {
// console.log(req.file);
csv()
.fromFile(req.file.path)
.subscribe((json)=>{
// console.log(json)
return new Promise((resolve,reject)=>{
let product = new Item(json.Title);
product.distributor_id = req.params.id
product.SKU = json.SKU
product.UPC = json.UPC
product.Price = json.Price
return resolve(product)
}).then((product) => {
// console.log(product)
//async request to external API
var productInfo = getPriceandASIN.getPriceandASIN(product.UPC)
return productInfo
}).then((info) => {
console.log(info)
console.log(product)
//a bunch of other stuff I don't need to worry about yet
// return res.end()
})
});
})
如果我只是 console.log(info),我会得到预期的响应,即为集合中的每个项目调用前一个异步函数的结果。但是,如果我也尝试 console.log(product),整个函数就会中断,我只会得到集合中第一个项目(而不是产品)的信息,而没有别的。是什么导致了这种行为?我认为关于解决 Promise 有一些我根本不理解的东西,但我无法从文档中看出什么。
【问题讨论】:
标签: node.js express asynchronous promise es6-promise