这很可能是我不知道的关于 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(cleanup,cleanup)
子句存在时,来自主机的任何错误都会被then()
链接到请求的所有后续子句的成功函数接收,其最终效果是将失败响应转换为下游代码的成功响应。
如果我简单地注释掉上面的 then 子句,那么应用程序代码就会按预期调用成功或失败函数。
这似乎是一件非常直接的事情,完全符合 Leo 的例子,但我很难过。JS,特别是 promises 对我来说是新的,所以我不知道如何使用它们,或者如果这是预期的——我只是在遵循示例并尝试在它们的基础上进行构建。
我哪里错了?