在处理程序中创建了一个 Promise,但没有从中返回

2023-11-29

我刚刚开始使用 Bluebird Promise,但遇到了一个令人困惑的错误

代码摘要

var
  jQueryPostJSON = function jQueryPostJSON(url, data) {

    return Promise.resolve(
      jQuery.ajax({
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        type: "POST",
        url: url,
        data: JSON.stringify(data)
      })
    ).then(function(responseData) {
      console.log("jQueryPostJSON response " + JSON.stringify(responseData, null, 2));
      return responseData;
    });
  },
  completeTask = function completeTask(task, variables) {
    console.log("completeTask called for taskId: "+task.id);
    //FIXME reform variables according to REST API docs
    var variables = {
      "action" : "complete",
      "variables" : []
    };
    spin.start();
    return jQueryPostJSON(hostUrl + 'service/runtime/tasks/'+task.id, variables)
      .then(function() {
        gwl.grrr({
          msg: "Completed Task. Definition Key: " + task.taskDefinitionKey,
          type: "success",
          displaySec: 3
        });
        spin.stop();
        return null;
      });
  }

jQueryPostJSON 函数似乎在其他地方使用时工作正常,但在这种情况下,有从服务器返回的数据。

当它在完整任务中使用时,POST 成功,如在服务器端可以看到的那样,但是永远不会调用 then 函数,而是在控制台中调用我收到错误

completeTask called for taskId: 102552
bundle.js:20945 spin target: [object HTMLDivElement]
bundle.js:20968 spinner started
bundle.js:1403 Warning: a promise was created in a  handler but was not returned from it
    at jQueryPostJSON (http://localhost:9000/dist/bundle.js:20648:22)
    at Object.completeTask (http://localhost:9000/dist/bundle.js:20743:14)
    at http://localhost:9000/dist/bundle.js:21051:15
From previous event:
    at HTMLDocument.<anonymous> (http://localhost:9000/dist/bundle.js:21050:10)
    at HTMLDocument.handleObj.handler (http://localhost:9000/dist/bundle.js:5892:30)
    at HTMLDocument.jQuery.event.dispatch (http://localhost:9000/dist/bundle.js:10341:9)
    at HTMLDocument.elemData.handle (http://localhost:9000/dist/bundle.js:10027:28)
bundle.js:1403 Unhandled rejection (<{"readyState":4,"responseText":"","sta...>, no stack trace)

我收到的警告是有原因的,这不是问题所在。 这是未处理的拒绝,而且实际上 POST 中没有错误。

第 21050 行在这里我正在测试这些功能的组合来自不同模块的功能

jQuery(document).bind('keydown', 'ctrl+]', function() {
        console.log("test key pressed");
        api.getCurrentProcessInstanceTask()
        .then(function(task) {
          api.completeTask(task);
        });

      });

第一个函数调用 api.getCurrentProcessInstanceTask() 的输出似乎表明它工作正常,但无论如何都是如此

getCurrentProcessInstanceTask = function getCurrentProcessInstanceTask() {

      if (!currentProcess || !currentProcess.id) {
        return Promise.reject(new Error("no currentProcess is set, cannot get active task"));
      }

      var processInstanceId = currentProcess.id;

      return Promise.resolve(jQuery.get(hostUrl + "service/runtime/tasks", {
          processInstanceId: processInstanceId
        }))
        .then(function(data) {
          console.log("response: " + JSON.stringify(data, null, 2));
          currentProcess.tasks = data.data;
          // if(data.data.length > 1){
          //   throw new Error("getCurrentProcessInstanceTask expects single task result. Result listed "+data.data.length+" tasks!");
          // }
          console.log("returning task id: "+data.data[0].id);
          return data.data[0];
        });
    },

您收到警告是因为您 - 正如它所说 - 没有返回来自then处理程序。
最好通过捕获并记录拒绝来跟踪拒绝的来源。没有堆栈跟踪表明您(或您使用的库之一)是throwing 一个普通对象,它不是Error。尝试找到并解决这个问题。

您的调用应如下所示:

api.getCurrentProcessInstanceTask().then(function(task) {
    return api.completeTask(task);
//  ^^^^^^
}).catch(function(err) {
// ^^^^^
    console.error(err);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在处理程序中创建了一个 Promise,但没有从中返回 的相关文章

随机推荐

  • Instagram 访问令牌以检索任何用户源

    我能得到这正常吗任何用户使用相同的 access token 进行提要 这里有两个例子 第一个来自测试帐户 这是我应该有权访问的 第二个来自 ImagineDragons 的 Instagram feed https api instagr
  • 根据值将 Pandas 列表列拆分为多个列

    我有一个带有列表列的 Pandas Dataframe 我想根据值将此列表列拆分为多个列 根据列名返回每条记录的 yes value 或 no value 输入示例 id values 1 A B C D 2 D E F 3 A D 4 K
  • SSIS 中 Oracle 到 SQL 2005 DATETIME 字段溢出

    我正在使用 SSIS 将数据从 Oracle 导入到 SQL Server 2005 我认为 Oracle 中的日期时间字段存储的精度高于 SQL Server 2005 DATETIME 字段允许的精度 从而导致溢出错误 将桌子放入的最佳
  • Apple 私有 API 被 libarchive 拒绝 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我在用着自由档案库我已将源代码和标头包含在我的 iphone 项目中 Apple 拒绝了该二进制文件 称我错误地将私有 API 用于一堆函数 其中一个这样的函数是 archive r
  • 替换字符串中的 Unicode 转义序列 [重复]

    这个问题在这里已经有答案了 我们有一个文本文件 其中包含以下文本 u5b89 u5fbd u5b5f u5143 当我们在 C NET 中读取文件内容时 它显示如下 u5b89 u5fbd u5b5f u5143 Our 解码器方法 is
  • 指定位置未找到Flutter SDK

    在我更新 Android Studio 以拥有最新的 Flutter 和 Dart 插件后 我现在非常沮丧 现在它告诉我 没有配置 FLutter SDK 当我给它 SKD 路径时 它只是说 在指定位置找不到 Flutter SDK Dar
  • 如何在 Windows 上安装犰狳?

    我需要安装并使用Armadillo库来处理线性代数 我去了他们的网站并下载了 tar xz文件 但我不知道如何安装它 我怎样才能安装Armadillo 我主要使用Dev C 但我有时也使用XCode 如果您使用的是 Windows 则可能会
  • Bio.SeqUtils.molecular_weight() 函数在 molecular_weight 间隔内打印序列时出错

    我正在尝试在 python 中创建一个函数 给定一个 不 模糊的序列 并且分子量间隔返回该序列表示的所有明确序列的列表 我用以下代码尝试了这一点 def extend ambiguous dna file name mw min mw ma
  • JavaScript 正则表达式全局匹配组

    Update 这个问题几乎是重复的this 我确信我的问题的答案就在那里 但我找不到词语来简洁地表达它 我正在尝试使用 JavaScript 正则表达式执行以下操作 var input Warehouse Local Release Loc
  • 在 Fluent Nhibernate 中使用多个数据库,System.TypeInitializationException 未处理

    我试图实施连接多个数据库的 Fluent NHibernate 示例应用程序 我的流利 NHibernate存储库如下 namespace RepositoryExample Repository NHibernate public cla
  • TCP:地址已在使用异常 - 客户端端口的可能原因?没有端口耗尽

    愚蠢的问题 我从连接到服务器的客户端获取这些信息 遗憾的是 设置很复杂 调试也很复杂 而且我们没有其他选择 环境 客户端 服务器系统 两者运行在同一台机器上 客户端实际上是一个在特定时间进行一些数据库操作的服务 连接来自 C 通过 OleD
  • Android 重复通知在应用程序关闭时不起作用

    我想每天在特定时间发送通知 打开应用程序时 代码正在运行 但当它关闭并删除时 通知不会显示 我已经为此使用了广播接收器和服务 代码如下 任何人都可以帮助解决这个问题 清单文件
  • 取消时协程取消注册接收者

    当服务停止时 我的协程泄漏了广播接收器 这是因为服务在回调完成之前停止了 如何以允许我注销接收器的方式取消协程 The Service工作原理如下 class DataCollectorService Service var job Job
  • 组合列表元素

    如何合并 组合列表中的两个或三个元素 例如 如果有两个元素 则列表 l l a b c d e 1 2 3 4 5 被合并到 a 1 b 2 c 3 d 4 e 5 但是如果有三个元素 l a b c d e 1 2 3 4 5 I II
  • Java 准备好的语句未执行

    我创建了一个小型的三层程序 包括 前端 gt servlet gt 数据库 前端我在表单中输入一些详细信息 它们被传递到 servlet 该 servlet 将呈现一些 HTML 并显示输入到表单中的值 同时还调用 DatabaseHelp
  • 根据另一个集合中特定文档的存在情况,将集合中的文档发布到 Meteor 客户端(发布与关系)

    我有两个收藏 优惠 相关字段 id ShareRelations 相关字段 接收者ID and offerId 我只想向登录用户发布已共享给他的优惠 实际上 我是通过使用辅助数组 visibleOffers 来完成此操作 我通过循环每个 S
  • 编码 javascript url 以传递 #(hashtag)

    我将 URL 传递给 PHP 文件 在其中更改一些颜色等 其中一种颜色是 ccc并被传递为 background ccc这破坏了我的 PHP 文件 它停止了我的 GET该主题标签处的参数 之后的所有内容都不会传递 我尝试将我的网址编码为en
  • 反射式 Web 应用程序 (WebIDE)

    Preamble 所以 这个问题已经得到了解答 但由于这是我对该项目的第一个问题 我将继续在我对该项目提出的其他问题中引用它 对于来自另一个问题的任何人 以下是基本想法 创建一个 Web 应用程序 可以使创建其他 Web 应用程序或网站变得
  • 在 Fortran 中查找数组中满足条件的最小值[索引]

    我正在寻找数组中大于某个数字的最小值 我发现这次讨论我不明白 有MINLOC 但看起来它本身并没有达到我想要的效果 尽管我没有解析给定示例中传递给它的参数 也可以使用循环来完成此操作 但可能很笨拙 你可能想要MINVAL 如果你的数组是这样
  • 在处理程序中创建了一个 Promise,但没有从中返回

    我刚刚开始使用 Bluebird Promise 但遇到了一个令人困惑的错误 代码摘要 var jQueryPostJSON function jQueryPostJSON url data return Promise resolve j