首页 > 解决方案 > 使用回调创建用于删除/确认的可重用函数

问题描述

我不确定以前是否有人问过这个问题,我确实检查过,但我不确定如何实际搜索它。

我想创建一个可重用的删除功能,根据用户决定进行确认。我创建了这个简单的函数来编辑带有对象值的元素数据,但我无法运行在第一个函数中设置的回调。

或者甚至有可能根据用户的决定以某种方式从该函数返回一个布尔值?

这是我想要实现的逻辑示例

function run(options, cb){
   if(options['success']){
      cb();
   }
}

var options = {success: true};
var cbarray = new Array('id', 'token');

//calling the function and setting the callback
run(options, function(cbarray){
    $.ajax({
       url: 'blabla',
       type: 'post',
       data: {id: cbarray[0], token: cbarray[1]},
       success: function(resp){
          console.log(resp);
       }, error: function(resp){
          console.log(resp);
       }
    });
});

有点难以解释,所以我用自己的代码创建了这个 jsfiddle https://jsfiddle.net/43zrqkvm/7/

也许我应该为此使用承诺?我还没有时间学习承诺,但也许我应该?

标签: javascriptjquerycallback

解决方案


当您定义回调函数时,您正在请求将在函数体中使用的参数(在您的情况下是 ajax 选项)但在 Run 函数中您不传递它

它必须看起来像这样

function run(options,arg, cb){
       if(options['success']){
          cb(arg);
       }
    }

    var options = {success: true};
    var cbarray = new Array('id', 'token');

    //calling the function and setting the callback
    run(options,cbarray, function(arg){
        $.ajax({
           url: 'blabla',
           type: 'post',
           data: {id: arg[0], token: arg[1]},
           success: function(resp){
              console.log(resp);
           }, error: function(resp){
              console.log(resp);
           }
        });
    });

推荐阅读