在JavaScript中回调后交替操作的更好方法

时间:2016-09-23 20:46:15

标签: javascript callback

我有一些用于加载文件的API(LoadFileApi.load),可以在完成时触发回调。在准备时触发了共同的逻辑(准备)和两种不同的处理方式(由点击处理程序触发)。我想知道,如何以清晰方便的方式制作JS方式?

function loadFile (onCompleteFileLoad) {
    LoadFileApi.load({
        url: 'url', 
      onComplete: filePreparing
    });
  }

function fileProcessing1() {

}

function fileProcessing2() {

}

// common logic
function filePreparing(file) {
   // prepare
   ...
   // after prepare I need to run file processing routine corresponding to each handler 
}

function clickHandlerA() {
    loadFile(filePreparing);

  // needs to trigger fileProcessing1
}

function clickHandlerB() {
    loadFile(filePreparing);

  // needs to trigger fileProcessing2
}

简单的决定是声明共享变量并在文件加载之前在每个处理程序中设置它。

function filePreparing(file) {
   // prepare
   ...
   if (processingMethod == 1) {
      fileProcessing1();
    } else {
      fileProcessing2();
    }

}

function clickHandlerA() {
    processingMethod = 1;
    loadFile(filePreparing);

}

function clickHandlerB() {
    processingMethod = 2;
    loadFile(filePreparing);

}

var processingMethod;

但在我看来,应该存在更优雅的JS方式......如果在PREPARE中没有条件选择处理函数,那将会很棒。它应该以某种方式作为参数传递......

1 个答案:

答案 0 :(得分:0)

我相信你想要的东西与这个问题的答案类似 - JavaScript: Passing parameters to a callback function

使用上面链接中答案中描述的模式,您将看到您可以简单地将参数传递到您的回调中。

类似的东西:

function clickHandlerB() {
    loadFile(filePreparing, fileProcessing1);

}

而不是传递一个字符串标志来指示调用哪个函数只是传递函数本身。 filePreparing函数的签名需要更新以包含回调函数

function filePreparing(file, callback)