Javascript 解析函数超时管理
在。我们在某些依赖于外部服务请求的请求上遇到问题 如果我们有4个承诺,承诺1和承诺2创建对象,但是如果承诺3中的请求“超时”,我们需要销毁在流程中创建的任何内容。我以与以下示例类似的方式级联错误处理:Javascript 解析函数超时管理,javascript,parse-platform,promise,Javascript,Parse Platform,Promise,在。我们在某些依赖于外部服务请求的请求上遇到问题 如果我们有4个承诺,承诺1和承诺2创建对象,但是如果承诺3中的请求“超时”,我们需要销毁在流程中创建的任何内容。我以与以下示例类似的方式级联错误处理: var obj1, obj2, obj3; query.find().then(function() { obj1 = new Parse.Object('Anything'); return obj1.save(); }).then(function() { obj2 =
var obj1, obj2, obj3;
query.find().then(function() {
obj1 = new Parse.Object('Anything');
return obj1.save();
}).then(function() {
obj2 = new Parse.Object('Anything');
return obj2.save();
}).then(function _success() {
obj3 = new Parse.Object('Anything');
return obj3.save();
}).then(function _success() {
response.success();
}, function _error(err) {
var errorPromises = [];
if (obj1 != undefined) errorPromises.push(deleteExternalStuff(obj1.id));
if (obj2 != undefined) errorPromises.push(deleteExternalStuff(obj2.id));
if (obj3 != undefined) errorPromises.push(deleteExternalStuff(obj3.id));
Parse.Promise.when(errorPromises).then(function _success() {
response.error();
}, function _error() {
response.error(err);
});
});
deleteExternalStuff
函数对对象的一个id发出get
请求,然后返回一个object.destroy()
promise
我的问题是get
查询有效,但是deleteExternalStuff
中的destroy
承诺不会从数据库中删除对象。对如何处理这个案子有什么建议吗
编辑:
我已经测试过了,无论何时出现超时,都会执行错误,但是destroy()
的工作不正常
编辑2:为deleteExternalStuff
函数添加了类似的结构
function deleteExternalStuff(objectId) {
var query = Parse.Query('Another Object');
query.equalTo('objXXX', objectId);
return query.find().then(function _success(anotherBunchOfObjects) {
var deletePromises = _.map(anotherBunchOfObjects, function(obj) {
return obj.destroy();
});
return Parse.Promise.when(deletePromises);
}, function _error(error) {
console.log(error); // **ERROR LOG**
return Parse.Promise.as();
});
}
编辑3:
经过进一步测试,我在deleteExternalStuff
函数中添加了一个错误处理程序,并打印到日志中。。。显然,**错误日志**
打印以下内容:{“code”:124,“消息”:“请求超时”}
这使我认为,如果已经达到超时限制,解析不允许在错误处理中使用链接承诺…:\
对于替代解决方案的建议,我们深表感谢。要确保在您的请求完成之前删除所有对象,您必须等待所有承诺得到解决:
var promises = [];
if (obj1 != undefined) promises.push(deleteExternalStuff(obj1.id));
if (obj2 != undefined) promises.push(deleteExternalStuff(obj2.id));
if (obj3 != undefined) promises.push(deleteExternalStuff(obj3.id));
Promise.all(promises).then(function() {
response.error(err);
});
为了避免超时问题,您可以将其设置为作业。您可以发布
deleteExternalStuff
代码吗?刚刚添加了第三次编辑,其中包含有关错误代码的更多信息。我实际上在时有,对不起,我的错误。。。刚刚编辑了这个问题,还包括了deleteExternalStuff
函数问题是,我不确定原始的错误函数是否会等到所有承诺都实现,因为错误是超时错误
。。。如果它是一个未找到的对象
或类似的东西,那么请求实际上还有时间执行查询,但我不确定在这种情况下Parse的行为。