Javascript -Uncaught promise 被拒绝,即使它已经被拒绝

标签 javascript parse-platform promise

我正在运行这个 Parse.com 云代码作业。它查询我的一个类并获取 url,然后我读取这些 url,它们是 xml 文件,我从中获取一些数据并将其保存以进行解析。从代码中可以看出。

这是代码

完整代码在这里 gist.github.com/gouegd/aae61aa08b8295d52b08

当我运行这个云代码作业时。在控制台中。我看到这条消息

Failed with: Uncaught 一个 promise 被拒绝了,即使它已经被拒绝了。

这是因为一些 url 无效,然后代码中断。

基本上我需要一种方法来处理其中一个 URL 不工作并且代码没有停止的情况!!并继续其他网址。

这个问题发生在第 77-83 行之间,传递 url 变量的地方,所以我需要它忽略错误的 url,然后继续处理其余的 url。

提前感谢您的帮助。

最佳答案

这是一条奇怪的错误信息。

据我所知...

在第 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 的 promise 不是“抛出安全”的话,这很困惑但可以容忍:

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.
});

关于Javascript -Uncaught promise 被拒绝,即使它已经被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26677920/

相关文章:

javascript - 在 Node 中验证用户时得到奇怪的输出

javascript - Angular 4 : How to bind to function result in ngFor

Swift:为什么用户的位置在 queryForTable 方法中不容易获得?

ios - Parse 只检索 100 个项目,我有 108 个

javascript - promise 无序

javascript - 为什么 async await 函数返回一个值,而 promise 函数返回一个未定义的值?

javascript - 使用 jQuery 对重复列表中的元素进行排序

javascript - 子菜单列表与父列表对齐?

javascript - 从 JavaScript 中的文本文件获取值

swift - 快速的 UITableView