gpt4 book ai didi

javascript - promise : return then() when action inside it is finished

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:21 25 4
gpt4 key购买 nike

我正在使用 React-Redux-Express,并且正在尝试使用 express-fileupload 上传图像。这是我在 Express 服务器中上传图像的逻辑:

在我的 Express route ,我使用 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));
});
});

问题是最后一个thenreq.files.imgFile.mv方法完成移动图像之前被触发,所以React输入组件在前端找不到它。

有谁知道如何在第一个 then 中创建一个 promise ,这样只有当 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();
});
});
})

但是,在这种情况下,省略回调函数以强制 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));
})

关于javascript - promise : return then() when action inside it is finished,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51294530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com