如何运行 IF/else 语句完成后的回调

How to run the call back after the IF/else statement is completed

我有 ifelse 语句以及一个更新函数,该函数将根据 if 语句的完成工作。我想 运行 回调以确保它仅在任何分支完成时 运行。

if (source !== "itunes"){
    getCustomCover(title);
}
else {
    getiTuensCover(iTunes_data);
}

updateCover(currentCoverURL);

所以我想确保 updateCover(currentCoverURL);getCustomCover(title); 完成时是 运行ning。 else 分支也是如此。像 $.when() & then().

这样的东西

提前致谢。

function getCustomCover(currentTitle){
    $.each(cover_data, function( key, value ) {
        if (value.title === currentTitle){
            currentCoverURL = value.image;
        } else {
            currentCoverURL = settings.default_image;
        }
    });
}

如果这段代码:

if (source !== "itunes"){
    getCustomCover(title);
}
else {
    getiTuensCover(iTunes_data);
}

在 for each 中,如果要同时传递所有结果,则可能需要一个 promise。但是,如果您可以在不影响您的应用程序的情况下异步使用 cover,那么您可能需要一个回调模式。例如,将您的函数修改为如下内容:

var getCustomCover = function (title, callback) {
  var jsonFile = './jsonfile.json';

  fs.readFile(filePath, (err, data) => {
    if (err) {
      callback(err);
    } else {
      var json = JSON.parse(data.toString());
      var cover = json['title'].cover;
      callback(null, cover);
    }
  });
};

根据您的需要进行更改。然后调用你的函数:

if (source !== "itunes"){
    getCustomCover(title, (err, coverUrl) => {
        if (err) {
            console.log(err);
        } else {
            updateCover(coverUrl);
        }
    });
}
else {
    // DO THE SAME IF NECCESSARY HERE
    getiTuensCover(iTunes_data);
}

这是 NodeJS 中的标准错误优先回调模式。

编辑 --------------

适配你刚刚添加的代码:

function getCustomCover(currentTitle, callback){
  $.each(cover_data, function( key, value ) {
      if (value.title === currentTitle){
          currentCoverURL = value.image;
      } else {
          currentCoverURL = settings.default_image;
      }

      callback(currentCoverURL);
  });
}

这样,回调函数将使用 currentCoverURL 个参数调用,次数与循环中的覆盖次数一样多。

编辑 2 --------------

如果您希望在循环中只找到一个 coverURL,那么您可以考虑重构您的代码,如下所示:

function getCustomCover(currentTitle, callback){
  currentCoverURL = settings.default_image;

  $.each(cover_data, function( key, value ) {
      if (value.title === currentTitle){
          currentCoverURL = value.image;
      }
  });

  callback(currentCoverURL);
}