javascript,将函数转换为函数

Andresmijares

关于将函数创建到函数中,我有某种错误概念,在此对您有所帮助。

假设我必须多次应用jquery $ .post函数,所以我不想重复自己,所以我创建了类似的东西。

 myLoadFunction(url, function) {

     $.post(url, function( data ) {
        //something generic
     })
     .done(function(data) {
       //what I want to put on my caller function
     })
     .fail(function(data) {

       //something generic
     });

 }

所以我可以这样执行它:

myLoadFunction("myurlblabla", function() {
       //everything I need into the .done
});

有任何想法吗?我什至不确定这是否可行,所以请不要杀死我:)

问候!

罗伊·纳米尔(Roi Namir)

您想要实现的结构已经为您提供:

你要:

myLoadFunction("myurlblabla", function() {..if success...});

但是您已经在:

myLoadFunction("myurlblabla").done(...)  // nicer right ?

使用延迟对象,它已经提供了以下功能:

更改结构以返回延迟的obj:(或者最好查看我的编辑)

myLoadFunction(url) 
{
    return $.post(url, function(data) {
        //something generic
    });
}

var R = myLoadFunction("myurlblabla");

R.done(function (){ do whatever}); // here is your actual question.
R.fail(function (){ do whatever});

也不要混合责任!

myLoadFunction应该不再加载

结果,load您可以此负载工厂功能之外执行其他操作

不要把逻辑放在那

编辑

关于您的评论:

但是在这一点上,我可以允许为失败和一般负载保留相同的答案吗?我只是不想重复失败的情况,也不想重复数据为空的情况

您可以设置一个函数(一次),每次将引用:(不要将其放在全局范围内。包含这些函数的对象会很棒)。

function myGENERICCallback(){ something I don't want to repeat}
function mydoneCallback(){ something I don't want to repeat}
function myfailCallback(){ something I don't want to repeat}
function myAlwaysCallback(){ something I don't want to repeat}

现在-您可以执行以下操作:

var R = myLoadFunction("myurlblabla");

R.done(mydoneCallback); 
R.fail(myfailCallback);

因此,您的load函数将如下所示:

myLoadFunction(url) 
{
    return $.post(url, myGENERICCallback); 
}
  • myGENERICCallback 将永远被称为
  • 您加载的函数不包含任何逻辑
  • 您可以针对每种情况使用特定的回调
  • 您遵守单一责任原则。
  • 你不重复你的代码
  • 您只需要在一处更改
  • 其他也可以订阅您的延期。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章