返回延迟对象或null
Return deferred object or null
我有一个提交一些数据的函数。根据某个布尔值的状态,我可能不想提交这个数据。然而,调用者总是期望一个延迟的对象作为返回值来检查。done()或。fail()。似乎你不能返回null或什么也不返回当某些事情预期完成/失败(有意义),所以我不知道如何从这个异步调用返回。
我可以插入$。延迟对象并立即解析/返回它,但这似乎是糟糕的设计。我不能在这里更改调用方法。
在不使用延迟对象的情况下,如何返回延迟对象或满足。done()或。fail()的其他返回值?
function foo(a) {
bar(a).done(function () {
console.log("done");
}).fail(function () {
console.log("fail");
});
}
function bar(a) {
if (a){
// Could create a $.Deferred and resolve it
return;
}
return doAsync();
}
function doAsync() {
var defer = $.Deferred();
defer.resolve();
return defer.promise();
}
foo(false); // fine
foo(true); // error
http://jsfiddle.net/ma4grjj4/2/主要问题是,使用布尔参数改变函数的进程流通常是一种设计气味。
我想你会同意这样做是没有意义的:
function process(doNotProcess) {
if (doNotProcess) return;
//process
}
在上面的示例中,简单地不调用process()
以避免处理会更有意义。
"我理想的做法是在foo中跳过整个bar调用,但是abar()中发生了很多事情。两者都需要这样做情况下"
这些代码可能应该从done
回调中提取出来,并放入一个不同的函数中,这将允许您重用它而不必调用bar
。
"我可以黑进$。"延迟对象并立即解析/返回它,但这看起来像是糟糕的设计。"
当您需要标准化可能具有同步或异步实现的API的使用时,创建延迟对象并立即解析它们是一种相当标准的方法。
这样做是一个很好的实践,因为它使客户端不必依赖于实现细节。
相关文章:
- 谷歌地图API-“;toGeoJson”;返回几何体为null的对象
- 验证对象是否为null Javascript/Angularjs
- 对象为null或IE9中存在未定义错误
- 如何计算一个对象中五个属性中有多少是非null的
- Microsoft JScript运行时错误:无法获取属性'的值;样式':对象为null或未定义
- javascript对象显示为null,但object.properties返回数据
- global.getElementById('..')为null或不是对象
- IE8错误:为null或不是对象,但仍然可以跟踪/控制台注销
- AJAX请求中的JSON对象为Null或空
- Highcharts无法设置属性'的值;要点':对象为null或未定义
- ui.selectmenu投掷'this.newelement.0'为null或不是对象
- 添加到序列化数组中的复杂对象在服务器端始终为 null
- 什么是 ClojureScript 类似地将不存在的对象值设置为 JavaScript 中的 null
- 最大查询返回带有sequelise.js的null对象
- 从JSON对象中删除jQuery和null对象
- 从客户端到服务器的SocketIO回调没有'不起作用(改为null对象)
- 迭代react元素中的undefined/null对象
- “Interiting"From null对象似乎不会影响性能
- Null对象中属性默认值的赋值
- 在js中捕获null对象