仅在满足条件时才在“获取”中执行“然后”

时间:2019-09-08 13:15:05

标签: javascript reactjs promise fetch

我有一个返回字节数组的api,使用saveAs将字节数组保存为pdf。以下是示例代码。我的要求是,我可以取消两个然后吗?我尝试先放入saveascode,即使下载了pdf,也无法加载。

我有一些标头,然后可以先检入。 response.headers.get("status")); 仅当状态正常时,我才需要执行第二个。 可能吗 ? 到目前为止,即使response.ok不为真,也将执行第二个。有什么想法吗?

fetch(param).then(function(response) {
  if (response.headers.get("status")) == 'ok') {
  return response.blob();
}

}).then(function(response) {
      if (response == undefined) {
        //handle
      } else {
        const file = new Blob([response], {
          type: 'application/pdf',
        });
        saveAs(file, fileName);
      }

2 个答案:

答案 0 :(得分:1)

fetch(param).then(function (response) {
    if (response.headers.get("status") == 'ok') {
        return response.blob();
    }
    else { throw new Error("Status is not ok"); }
}).then(function (response) {
    if (response == undefined) {
        //handle
    } else {
        const file = new Blob([response], {
            type: 'application/pdf',
        });
        saveAs(file, fileName);
    }
}, function (statusNotOKError) {
    //do handling if needed
});

答案 1 :(得分:1)

然后,如果您只想有条件地执行,则应将if处理程序放入该fetch(param).then(function(response) { if (response.headers.get("status")) == 'ok') { return response.blob().then(function(response) { const file = new Blob([response], { type: 'application/pdf', }); saveAs(file, fileName); } } else { // handle } }); 块中:

drag_and_drop