0 javascript node.js promise express sequelize.js
我正在使用React-Redux-Express,我正在尝试上传图像express-fileupload
.以下是我在Express服务器上传图像的逻辑:
在我的快车路线中,我使用Sequelize
router.put('/:id', function(req, res, next) {
models.Projects.update(
{
title: req.body.title,
img: req.body.img,
description: req.body.description,
},
{
returning: true,
plain: true,
where: {
id: req.params.id,
},
}
)
.then(() => {
if (req.files) {
req.files.imgFile.mv(toRelative(req.body.img), function(err) {
if (err) {
throw new Error('Image saving failed');
}
});
}
})
.then(() => {
models.Projects.findById(req.params.id).then((result) => {
return res.send({
Project: result,
});
});
})
.catch((error) => {
return res.send(String(error));
});
});
Run Code Online (Sandbox Code Playgroud)
问题是then
在req.files.imgFile.mv
方法完成移动图像之前触发了最后一个,因此React输入组件无法在前端找到它.
有谁知道如何在第一个内部创建一个承诺then
,所以只有当req.files.imgFile.mv
完成移动图像时才会触发第二个?
谢谢!
当你有基于回调的东西而不是基于Promise的一般想法是显式构造一个Promise,以便它可以在更大的Promise链中使用:
.then(() => {
if (!req.files) return; // resolve immediately if there are no files
return new Promise((resolve, reject) => {
req.files.imgFile.mv(toRelative(req.body.img), function(err) {
if (err) return reject('Image saving failed');
resolve();
});
});
})
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,省略回调函数以强制req.files.imgFile.mv(
返回Promise
自身会更容易:
.then(() => {
// if there are files, then the outer Promise chain will wait
// for the returned Promise to resolve before continuing with the next .then:
if (req.files) return req.files.imgFile.mv(toRelative(req.body.img));
})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
101 次 |
最近记录: |