微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – Mithril ajax包装,m.request,将失败转化为成功

这可能是一些关于JS和Mithril的新手,我不知道,但我已经在Mithril的m.request()中编写了一个缓存包装来跟踪多个待处理的请求,目的是合并多个相同的请求(这个概念非常适合以及后端RESTful API).

我的包装函数是这样的:

function sendRequest(sdrcfg,rqscfg) {
    var key=JSON.stringify(rqscfg);
    var ret=sdrcfg.cache[key];

    if(!ret) {
        var cleanup=function(dta) {
            delete sdrcfg.cache[key];
            sdrcfg.removed(key);
            if(Object.keys(sdrcfg.cache).length==0) { sdrcfg.completed(key); }
            return dta;
            };

        ret=m.request(rqscfg).then(cleanup,cleanup);

        if(Object.keys(sdrcfg.cache).length==0) { sdrcfg.activated(key); }
        sdrcfg.cache[key]=ret;
        sdrcfg.added(key);
        }
    return ret;
    }

我遇到的问题是,当存在.then(清理,清理)子句时,主机的任何错误都会被链接到请求的所有后续then()子句的success函数接收,并具有转换失败的净效果响应下游代码的成功响应.

如果我只是注释掉上面的then子句,那么应用程序代码就会按预期调用成功或失败函数.

这似乎是一件非常直截了当的事情,完全符合Leo的榜样,但我很难过. JS,特别是承诺对我来说是新的,所以我不确切知道如何使用它们,或者如果这是预期的 – 我只是按照示例并尝试构建它们.

我哪里错了?

解决方法:

你可能应该这样做:

.then(cleanup, function(e) {
  cleanup()
  throw e; //re-reject for downstreams
})

承诺拒绝类似于catch块,因此一旦添加回调来处理它,它就会触发链的其余部分的解析回调.

从Mithril 0.1.22开始,如果不处理,程序员错误(如ReferenceError)将记录到控制台.这恢复到0.1.19的行为.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐