2017-10-06 57 views
0

我得到这个代码(使用jquery)抓分开使用延迟对象

function getData(applyFunction, callback) { 
$.when(
    $.getJSON("http://www.mocky.io/v2/59d72b5b120000c902cb1b4f"), 
    $.getJSON("http://www.mocky.io/v2/59d72b5b120000c902cb1b4f"), 
).done(function(
    firstData, 
    secondData 
){ 
    callback(applyFunction, { 
     firstDataToApply: { data: firstData.popup }, 
     secondDataToApply: { data: secondData.popup } 
    }) 
}) 
} 

有没有办法赶上从$.getJSON部分(或when部分)分开的错误失败,记录这些错误,并且仍然是能够同时发送firstDatasecondData(同时)到回调函数?

(我知道,如果一些或两者$.getJSON失败我会发送空数据的回调,并且必须为null越来越弹出前检查)

遗憾的混乱后,在此先感谢

回答

1

是的。承诺是流水线,流水线中的每个处理程序都可以转换通过的值或错误,因此如果真的想要通过添加catch处理程序并返回null(或其他任何东西),可以将失败转化为“成功与null”您想要将错误转换为)的值。请参阅下面的catch电话,也是评论:

function getData(applyFunction, callback) { 
    $.when(
     $.getJSON("http://www.mocky.io/v2/59d72b5b120000c902cb1b4f") 
      .catch(function(err) { 
       console.error(err); 
       return null; 
      }), 
     $.getJSON("http://www.mocky.io/v2/59d72b5b120000c902cb1b4f") 
      .catch(function(err) { 
       console.error(err); 
       return null; 
      }) 
    ).done(function(firstData, secondData) { 
     callback(applyFunction, { 
      firstDataToApply: { 
       data: firstData.popup // You'll need checks on this! 
      }, 
      secondDataToApply: { 
       data: secondData.popup // And this! 
      } 
     }); 
    }); 
} 

当然,如果你打算做的比一次或两次这样多,可以避免功能重复自己:

function getJSONOrNull(url) { 
    return $.getJSON(url).catch(function(err) { 
     console.error(err); 
     return null; 
    }); 
} 

那么

function getData(applyFunction, callback) { 
    $.when(
     getJSONOrNull("http://www.mocky.io/v2/59d72b5b120000c902cb1b4f"), 
     getJSONOrNull("http://www.mocky.io/v2/59d72b5b120000c902cb1b4f") 
    ).done(function(firstData, secondData) { 
     callback(applyFunction, { 
      firstDataToApply: { 
       data: firstData.popup // You'll need checks on this! 
      }, 
      secondDataToApply: { 
       data: secondData.popup // And this! 
      } 
     }); 
    }); 
}