我在前端有非常复杂的逻辑用于将文件保存到服务器:
1) Save file1
2) Save file2
3) Save file3
如果file3无法保存,则必须还原file2和file1。现在我正在使用承诺:
file1.save().then(file2.save).then(file3.save).
我只是认为这些案例的实现可能类似于数据库的事务。有什么类似的吗?
答案 0 :(得分:1)
你需要的是服务器中要恢复的某种端点,我将把该实现的逻辑留给你,只使用存根file.save()
进行保存,file.revert()
进行还原,并假设两者都回报了承诺:
var files = [file1, file2, file3, ...], revertFiles =[];
var promise = Promise.resolve();
files.forEach( file =>
promise.then(() => file.save())
.then(() => revertFiles.unshift(file))
);
promise.catch(e => revertFiles.forEach( file => promise.then( () => file.revert() )));
基本上,每当你完成一些动作时,做一堆动作来恢复它,当你面临一些失败时,只需要把所有动作都堆叠在队列中。
修改:采用es5风格
var files = [file1, file2, file3, ...], revertFiles =[];
var promise = Promise.resolve();
files.forEach(function(file){
promise.then(function(){
return file.save();
}).then(function(){
revertFiles.unshift(file);
});
});
promise.catch(function(e){
revertFiles.forEach(function(file){
promise.then(function(){
return file.revert();
});
});
});