我正在运行这个Parse.com云代码作业。它查询我的一个类并获取URL,然后我读取这些URL,它们是xml文件,我从中获取一些数据并将其保存到解析中。从代码中可以看出。
这是代码
这里的完整代码gist.github.com/gouegd/aae61aa08b8295d52b08
当我运行此云代码作业时。在控制台中。我看到了这条消息
Failed with: Uncaught A promise was rejected even though it had already been rejected.
这是因为某些网址无效,然后代码中断了。
基本上我需要一种方法来处理它,当其中一个URL没有工作,没有代码停止!并继续其他网址。
这个问题出现在第77-83行之间,其中传递了url变量,所以我需要它来忽略坏网址,然后继续使用其他网址。
感谢您的帮助。
答案 0 :(得分:1)
这是一个奇怪的错误消息。
据我所知......
在89行和90行之间插入:
}, function() {
return Parse.Promise.as();//return resolved promise to keep the promise chain going.
给予:
return Parse.Cloud.httpRequest({
url: url,
//data: ... //some properties of menuItem?
}).then(function(httpResponse) {
return readResponse_async(httpResponse.text).then(function(res) {
if (res.menu.day.at(dayNumber).meal) {
return saveMeals_async(res.menu.day.at(dayNumber).meal, school, diningHallNumber, menuLocation);
} else {
return Parse.Promise.as();//return resolved promise to keep the promise chain going.
}
}, function() {
return Parse.Promise.as();//return resolved promise to keep the promise chain going.
});
});
或者可能更低一行:
return Parse.Cloud.httpRequest({
url: url,
//data: ... //some properties of menuItem?
}).then(function(httpResponse) {
return readResponse_async(httpResponse.text).then(function(res) {
if (res.menu.day.at(dayNumber).meal) {
return saveMeals_async(res.menu.day.at(dayNumber).meal, school, diningHallNumber, menuLocation);
} else {
return Parse.Promise.as();//return resolved promise to keep the promise chain going.
}
});
}, function() {
return Parse.Promise.as();//return resolved promise to keep the promise chain going.
});
修改强>
由于这两个都未能处理错误,你可能会尝试这个,如果我怀疑,Parse的承诺不是“扔掉安全的”,那么这很麻烦但是可以忍受:
return Parse.Cloud.httpRequest({
url: url,
//data: ... //some properties of menuItem?
}).then(function(httpResponse) {
try {
return readResponse_async(httpResponse.text).then(function(res) {
if (res.menu.day.at(dayNumber).meal) {
return saveMeals_async(res.menu.day.at(dayNumber).meal, school, diningHallNumber, menuLocation);
} else {
throw new Error();
}
});
}
catch(e) {
return Parse.Promise.as();//return resolved promise to keep the promise chain going.
}
}, function() {
return Parse.Promise.as();//return resolved promise to keep the promise chain going.
});