如何在Javascript / Jquery中失败的Ajax请求上返回新的Promise而不是错误?

经常

我有一个创建deferred对象的函数fail我调用后备功能时,该功能又会创建并返回它自己的deferred/promise对象。我想返回此后备的结果-deferred但我只能error在初始通话中返回

这是我在做什么:

 // method call
 init.fetchConfigurationFile(
      storage,
      "gadgets",
      gadget.getAttribute("data-gadget-id"),
      pointer
  ).then(function(fragment) {
      console.log("gotcha");
      console.log(fragment);
  }).fail(function(error_should_be_fragment) {
      console.log("gotcha not");
      console.log(error_should_be_fragment);
  });

fetchConfiguration如果我需要的文档/附件不在localstorage中,我的呼叫会尝试从localstorage加载,然后回退到从文件加载。

  init.fetchConfigurationFile = function (storage, file, attachment, run) {
    return storage.getAttachment({"_id": file, "_attachment": attachment})
      .then(function (response) {
        return jIO.util.readBlobAsText(response.data);
      })
      .then(function (answer) {
        return run(JSON.parse(answer.target.result))
      })
      .fail(function (error) {
        // PROBLEM
        console.log(error);
        if (error.status === 404 && error.id === file) {
          return init.getFromDisk(storage, file, attachment, run);
        }
      });
  };

我的问题是我可以抓住404一切,但是error我不想返回对象,而是想返回由生成的Promise init.getFromDisk

问题
是否可以getFromDisk在错误处理程序中返回我的调用结果如果不是,我将如何构造调用的结构,以便始终将诺言返回给我的第一个方法调用?

感谢帮助!

解决方案
感谢您的帮助!像这样修复它:

 init.fetchConfigurationFile(
      storage,
      "gadgets",
      gadget.getAttribute("data-gadget-id"),
      pointer
    ).always(function(fragment) {
      console.log("gotcha");
      console.log(fragment);
    });

init.fetchConfigurationFile = function (storage, file, attachment, run) {
  return storage.getAttachment({"_id": file, "_attachment": attachment})
    .then(function (response) {
      return jIO.util.readBlobAsText(response.data);
    })
    .then(
      function (answer) {
        return run(JSON.parse(answer.target.result));
      },
      function (error) {
        if (error.status === 404 && error.id === file) {
          return init.getFromDisk(storage, file, attachment, run);
        }
      }
    );
};
ak

.fail() 始终返回原始承诺。

您应该then()使用失败回调进行调用以允许链接:

.then(undefined, function(error) {
    return ...;
});

在jQuery 1.8之前,请.pipe()改用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在JavaScript中替换$$

来自分类Dev

如何在JavaScript中修改“ this”

来自分类Dev

如何在javascript中创建嵌套的promise?

来自分类Dev

如何在ajax请求中访问javascript函数

来自分类Dev

如何在JavaScript中编写HTTP请求?

来自分类Dev

如何在JavaScript代码中嵌入Javascript?

来自分类Dev

如何在 javascript 或 jquery 上插入 html

来自分类Dev

如何在JavaScript中返回对象文字

来自分类Dev

如何在JavaScript中返回匿名对象?

来自分类Dev

返回如何在JavaScript中工作

来自分类Dev

如何在 Javascript 中返回 HTTP 响应?

来自分类Dev

如何在javascript中隐藏错误消息

来自分类Dev

如何在javascript中隐藏错误消息

来自分类Dev

如何在JavaScript中捕获错误的URL?

来自分类Dev

如何在Javascript / jQuery中重置超时?

来自分类Dev

如何在JavaScript中调用jquery函数?

来自分类Dev

如何在Javascript / jQuery中重置超时?

来自分类Dev

如何在jQuery JavaScript中过滤数组

来自分类Dev

如何在jquery中重写javascript函数?

来自分类Dev

如何在JQuery / Javascript中验证表单

来自分类Dev

如何在 jquery 中翻译普通的 javascript

来自分类Dev

如何在Ajax响应时执行javascript?

来自分类Dev

如何在javascript Ajax中选择文本

来自分类Dev

如何在JavaScript的类外返回Promise的值

来自分类Dev

如何在JavaScript的类外返回Promise的值

来自分类Dev

如何使用ajax返回“失败”请求?

来自分类Dev

如何在JavaScript条件上添加样式

来自分类Dev

如何在QML上使用JavaScript库

来自分类Dev

如何在javascript变量上分配视频?