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

标签 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处理方法;

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

最佳答案

我相信您想要类似于此问题的答案 - JavaScript: Passing parameters to a callback function

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

类似于:

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

}

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

function filePreparing(file, callback)

关于javascript - 在 JavaScript 中回调后交替操作的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39669284/

相关文章:

javascript - strip 结帐,自定义集成 : how to detect abort?

node.js - 我应该对事件使用回调吗?

Symfony2实体注释断言/回调方法未调用

php - 为 JSON 字符串编码 HTML

javascript - 循环n个对象并返回最长的字符串

javascript - 为什么不传递 `' '.trim( )` straight to ` [].map( )`' 的回调工作?

javascript - 无法将对象发送到 NodeRED

javascript - 理解回调和相关的词法范围

javascript - 在 Node.js 中使用回调的正确方法

javascript - 从id里面的id获取内容?