Angular:在订阅中没有使用承诺的情况下发生承诺错误

2024-01-05

我有一个材料设计表,并编写了自定义函数来加载数据并从 JSON 数组对象中提取对象。

我有以下代码:

  public getDocumentList() {
    return this.http.get(this.getDocumentUrl, this.httpOptions)
    .subscribe(
      documentResponse => {
        for (let i = 0; i > Object.keys(documentResponse).length; i++){
          console.log(Object.keys(documentResponse));
          console.log("documentResponse:");
          console.log(documentResponse);
          console.log(of(documentResponse[i]).pipe(pluck('soap:Envelope', 'soap:Body', 'ns2:getDocumentsResponse', 'return')));
          this.documentList$ = of(documentResponse[i]).pipe(pluck('soap:Envelope', 'soap:Body', 'ns2:getDocumentsResponse', 'return'));
        this.documentList$.subscribe(x => this.documentListArray.push(x));
        console.log("Doklist", this.documentListArray)
      }
      this.setDokumentStatus();
       },
       error => {
        alert('Following error happened:' + ' ' + error['statusText']);
        console.log('There was an error: ', error);
      });
  }

上面的公共函数如下documentListArray与所需的对象...

但是会抛出这个半随机错误:

ERROR Error: Uncaught (in promise): TypeError: Cannot read properties of undefined (reading 'length')
TypeError: Cannot read properties of undefined (reading 'length')
    at WorkDocumentComponent.<anonymous> (work-document.component.ts:139:6

这段代码的最后一行是错误发生的地方(显然在括号之前):

async FillElementDataArray() {
    ELEMENT_DATA.length = 0;
    this.dataSource.connect().next(ELEMENT_DATA);

    let add_WorkDocument = {} as WorkDocument;
    console.log(this.DataService.documentListArray);
    let docsForMetadata;

    // this below is undefined yo
    for (let i = 0; i < this.DataService.documentListArray[0].length; i++)
    {

...这很奇怪。

这是异步和同步功能问题吗?

  • 我该如何解决?
  • 为什么它仍然未定义并且我无法 console.log 它?编辑:如果我将 console.log 放在日志循环之前,我可以 console.log 。

附:我的文档响应如下所示:

[
{
"soap:Envelope": {
"soap:Body": {
                "ns2:getDocumentMetaDataResponse": {
                    "return": {
                        "items": [
{
"key": "blah",
"values": "blablabla"
and so on...
}
]

你需要的东西叫做可选链接 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining与任何承诺或订阅无关。

如果您查看错误声明的行并阅读错误本身,this.DataService.documentListArray[0]value 在某些时候没有数据,因此读取它的 length 属性会返回错误。

此外,当尝试读取未定义值的属性时,该错误很常见,因此解决方案如下所示;

for (let i = 0; i < this.DataService.documentListArray[0]?.length; i++)
{

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

Angular:在订阅中没有使用承诺的情况下发生承诺错误 的相关文章

  • 收到错误 ../node_modules/rxjs/Rx"' 没有导出成员 'of'

    我正在从教程中学习新的角度 https angular io tutorial toh pt4 inject message service https angular io tutorial toh pt4 inject message
  • 如何在bootstrap中默认隐藏侧边栏?

    我在这里有一个很好的参考 作为 Bootstrap 在设计 Web 表单应用程序时的侧边栏 http startbootstrap com template overviews simple sidebar http startbootst
  • 您可以将现有的 div 复制到模式对话框吗

    我有一个带有多个面板的仪表板来显示不同的信息 我希望能够添加一个按钮来以模式显示面板 我正在使用引导程序 我所能找到的只是已经编写的模态 我想复制作为面板的 div 标签的内容 然后将其显示在模型中 但我不确定如何进行 该面板的 html
  • 实现悬停信息框

    我有一个日历 当用户将鼠标悬停在单元格上时 会出现一个很大的信息框 其中包含该日期的详细信息 虽然当用户离开时使信息框消失 但我遇到了一些麻烦 我基本上想要它 这样当鼠标光标移出信息框隐藏的日历单元格时 它就会消失 但我遇到了麻烦 因为mo
  • 如何强制折断不可折断的字符串?

    我有一个根据数据库中包含的数据生成的 HTML 页面 数据库有时包含浏览器无法分解的长字符串 因为这些字符串不包含可分解的字符 空格 点 逗号等 有没有办法使用 html css 甚至 javascript 来解决这个问题 看到这个link
  • 如何使用 jQuery Ajax 将 PHP 数组值传递到另一个文件?

    这是我的代码
  • 游戏手柄 JavaScript 未能按预期更新

    我正在尝试让浏览器报告我的 XBOX 控制器的状态 然而 在第一次按下按钮后 它似乎变得 卡住 我究竟做错了什么
  • 为什么我们使用 SpreadsheetApp.flush()?

    我的理解是 flush https developers google com apps script reference spreadsheet spreadsheet app flush有助于在功能发生时执行这些功能 而无需将它们捆绑在
  • setInterval() 在用户离开选项卡时暂停?

    javascript 中是否有任何方法的行为类似于 setInterval 并且当用户离开选项卡时停止并在用户再次进入选项卡时恢复 您可以使用以下方法创建自己的 API可见性API https developer mozilla org e
  • 窗口大小调整触发的 DOM 事件

    我有一个布局相当复杂的页面 最初打开页面时 某些元素的对齐存在问题 但是 可以通过更改浏览器窗口的大小来 永久 解决此问题 显然 我不希望用户必须调整浏览器窗口的大小才能使页面正确显示 所以我想知道是否有一种方法可以在页面首次加载时以编程方
  • 如何在 javascript 中基于类型字符串创建新对象?

    如何基于变量类型字符串 包含对象名称 在 javascript 中创建新对象 现在我有 随着更多工具的出现 列表会变得更长 function getTool name switch name case SelectTool return n
  • 找不到“节点”的类型定义文件

    更新 Angular Webpack 和 TypeScript 后出现奇怪的错误 知道我可能会错过什么吗 当我使用 npm start 运行应用程序时 出现以下错误 at loader Cannot find type definition
  • 将 onclick 事件应用于页面加载时不存在的元素

    我将列表样式设置为看起来像选择框 并且当用户单击列表中的元素时我想触发一个函数 但是该元素是通过加载的AJAX因此 当页面加载并且我无法绑定时不存在onclick事件到它onDomReady 如果我把它作为一个普通的选择列表 我可以只标记一
  • 在 *ngFor 循环内使用 Angular i18n 和 Angular 5

    我想在模板中的 ngFor Loop 内使用动态翻译 如下所示
  • Django 将 JSON 数据传递给静态 getJSON/Javascript

    我正在尝试从 models py 中获取数据并将其序列化为views py 中的 JSON 对象 模型 py class Platform models Model platformtype models CharField max len
  • 搜索多维数组 JavaScript

    我有一个如下所示的数组 selected products 0 r1 7up 61 Albertsons selected products 1 r3 Arrowhead 78 Arrowhead selected products 2 r
  • 当选项卡索引更改时,mat-tab-group 滚动到页面顶部

    我有奇怪的行为mat tab group在角度材料中 当我更改选项卡索引时 它会将页面滚动到顶部 知道为什么吗 这是角度材料库中的一个已知错误 请参阅here https github com angular material2 issue
  • p5 向量减法“sub”返回错误

    我一直在尝试将 p5 草图上传到 React 构建中 使用react p5 wrapper 我能够成功在屏幕上渲染画布 但是 某些矢量函数会导致错误 var distance this position dist ball position
  • D3 将现有 SVG 字符串(或元素)追加(插入)到 DIV

    我到处寻找这个问题的答案 并找到了一些我认为可能有用的资源 但最终没有让我找到答案 这里有一些 外部SVG http bl ocks org mbostock 1014829 嵌入SVG https stackoverflow com qu
  • DOM 解析器 Chrome 扩展内存泄漏

    问题 我开发了一个扩展程序 可以拦截 Web 请求 获取 Web 请求来源的 HTML 并对其进行处理 我使用 DOMParser 来解析 HTML 并且意识到 DOMParser 正在导致大量内存泄漏问题 最终导致 chrome 扩展崩溃

随机推荐