2016-09-23 46 views
1

我有一些API(LoadFileApi.load)用于加载文件,它在完成时触发回调。有准备时触发的通用逻辑(准备)和两种不同的处理方式(由点击处理程序触发)。我想知道,如何使它清晰和方便,JS方式?在JavaScript中回调后替代操作的更好方法

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中没有条件选择处理函数,那将会很棒。它应该作为参数以某种方式传递...

+0

你应该看看,以异步LIB http://caolan.github.io/async/ – hpfs

回答

0

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

使用在链接答案中描述的图案上方你会看到,你可以简单地一般传入参数到你的回调中。的

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

} 

,而不是传递字符串标志来表明调用哪个函数只是传递函数本身:

类似。该filePreparing函数的签名将需要更新,包括回调函数

function filePreparing(file, callback) 
+0

的问题是,API函数是一个外部并用一个参数固定签名。所以我看到只有这个解决方案https://jsfiddle.net/pn3xaLrb/ –