失败后重新启动 Promise

2023-11-30

我使用 Nodejs 和 Q 来运行一系列异步函数。如果一个函数失败,我想运行另一个函数,然后再次启动该序列。这是原样:

var promise = database.getUserCookies(user)
    .then(function (data){
        return proxy.search(data);
    })
        .fail(function (data) {
            if (data.rejected === 302) {
                var relogin = database.fetchAuth(data)
                    .then(function (data) {
                        return proxy.login(data)
                    })
                    .then(function (data){
                        return database.saveCookies(data);
                    })
                    .then(function (data){
                        //Restart the promise from the top.
                    })
            }
        })
    .then(function (data){
        return responser.search(data);
    })

您需要将其包装在一个可以再次调用的函数中。 Apromise其本身无法“重新启动”。

var promise = (function trySearch() {
    return database.getUserCookies(user)
    .then(proxy.search)
    .fail(function(err) {
        if (err.rejected === 302) { // only when missing authentication
            return database.fetchAuth(data)
//          ^^^^^^
            .then(proxy.login)
            .then(database.saveCookies)
            .then(trySearch) // try again
        } else
            throw err;
    })
}())
.then(responser.search)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

失败后重新启动 Promise 的相关文章

随机推荐

  • 内部类出现“范围内没有类型 file1 的封闭实例”错误

    我有一些代码 本质上它导入了另一个类 它有一个我试图访问的内部类 但它提出了这个错误 file2 java 5 error no enclosing instance of type file1 is in scope public sta
  • 使用 Java 访问 Android Manifest 属性

    这是清单示例 是否可以从 Java 访问属性 versionCode 和 versionName 如何
  • 写入有符号整数就像在 C++ 中写入无符号整数一样

    Is reinterpret cast这样做是安全的 这是最好的方法吗 例如 在下面的代码中 我有一个名为ibytestream 这允许读取uint16 ts and int16 t是从它 ibytestream next is a vec
  • 如何使用纯 javascript 将子级附加到具有指定类名的所有节点

    var menuheader document createElement li document getElementsByClassName subMenu appendChild menuheader 上面是代码片段 我收到此错误 f
  • NetBeans 12.6 的 TAB 和缩进问题

    交易是这样的 如果我在一行代码中使用 TAB 键 效果很好 我按下它 它会正常插入空格 如果我转到一个新行 一个没有代码的空行 它就不起作用 无论 像这样 System out pri nt 这是第一个问题 第 2 号 缩进 如果我在任意位
  • 在 jquery datetimepicker 中设置最大和最小日期时间

    我正在使用jquery datetimepicker 我想在其中设置mindate和时间 这是在第二个datetimepicker中选择的值 我尝试的是 date start datetimepicker autoSize true cha
  • 在运行时检查 Python 模块版本

    许多第三方 Python 模块都有一个属性 用于保存模块的版本信息 通常类似于module VERSION or module version 但有些则不然 此类模块的具体示例是 libxslt 和 libxml2 我需要检查运行时是否使用
  • 为什么这个 BASH 数组没有构建?

    为什么这个 bash 数组没有填充 我相信我过去也这样做过 回声 XECOMMAND 显示无数据 DIR 1 TEMPFILE tmp dir tmp ls l DIR tail n 2 sed s s g cut d f5 9 gt TE
  • 为什么这个嵌套的 content_tag 无法正确呈现?

    我的助手中有这个 def favorites count node content tag span class card favorite count do content tag i class icon heart node cach
  • 如何有选择地更新 wpf 中的模型

    当单击 listviewitem 时 我会在列表视图中显示模型列表 我打开一个绑定到 listviewitem 数据模型的对话框 并允许用户编辑各种属性 我正在尝试弄清楚如何处理 确定 和 取消 按钮 一方面 如果我将对话框直接绑定到列表视
  • Xcode单一窗口,显示来自xib文件的自定义视图

    我正在创建一个 OSX 应用程序 它有一个窗口 该窗口包含一个视图 在整个使用过程中呈现不同的视图 我目前的做法 在默认的 MainMenu xib 中 我在默认生成的窗口 这是我将使用的窗口 中为自定义视图创建了一个出口 我们就这样称呼它
  • 我可以用 C++ 扩展 lisp 吗?

    我可以从用 c 或 c 编写的库中调用 lisp 函数吗 我怎样才能扩展 lisp 当您想要执行一些系统调用或类似的操作时 这非常有用 从 lisp 调用非 lisp 代码的情况很少见 而且很少有必要 CLX CL 的 X11 客户端实现
  • 在 Swift 中,可以使用字符串来访问结构体属性吗?

    我有一个结构 我想知道是否可以使用括号语法访问变量 这是我的结构 import UIKit public struct Pixel public var value UInt32 public var red UInt8 public va
  • Objective-C 解密 AES 128 cbc 十六进制字符串

    我正在使用 Xcode 3 1 在 Snow Leopard 上为 iPhone 开发一个应用程序 该应用程序从 Restful Web 服务接收使用 AES 128 位 CBC 算法的十六进制格式的加密文本 该算法使用初始化向量 密钥 我
  • Android,从元素中删除边距和填充

    我有一个包含 LinearLayout 水平 的活动 我希望 LinearLyout 内的所有元素都被附加 没有边距或填充 我尝试了很多方法但没有效果 这是我最后一次尝试
  • IE8 返回“预期对象”[].slice.call [重复]

    这个问题在这里已经有答案了 我是 js 新手 这段代码适用于除 li 元素 选项卡 之外的所有浏览器 function slice call document querySelectorAll tabs forEach function e
  • 在 Windows 命令行上设置应用程序的窗口位置

    我有一个从桌面位置 0x0 开始的应用程序 我想在桌面中央打开它 我不想打开它并使用移动命令将其移动到中心 而是我的应用程序应该立即在中心位置启动 有什么方法可以通过命令提示符执行此操作吗 您将需要一个额外的实用程序 例如cmdow exe
  • 父节点移动时子节点不移动?

    我的世界有三个节点 玩家和 玩家视野 世界和视觉 SKShapeNodes 和我的玩家都使用 SKShapeNode 的自定义子类 当我移动世界时 所有玩家都会随之移动 但是当我移动玩家时 视觉节点保持固定在其位置 这可能是什么原因 这是我
  • 使用 Proxy 对象检测 Javascript 数组中的更改

    在 Javascript 中观察数组的变化相对简单 我使用的一种方法是这样的 subscribe to add update delete and splice changes Array observe viewHelpFiles fun
  • 失败后重新启动 Promise

    我使用 Nodejs 和 Q 来运行一系列异步函数 如果一个函数失败 我想运行另一个函数 然后再次启动该序列 这是原样 var promise database getUserCookies user then function data