当前位置: 首页 > 知识库问答 >
问题:

如何从promise返回数据[重复]

翟宏放
2023-03-14

#1处的console.log生成正确的数据。console.log#2始终生成“a”;

function addSiteParentId(nodeId) {   
    var theParentId = 'a';
    var parentId = relationsManagerResource.GetParentId(nodeId)
                        .then(function(response){                               
                            theParentId = response.data;
                            console.log(theParentId);  // #1
                        });
    console.log(theParentId);  // #2
    return theParentId;
}

如有任何指示,将不胜感激。

共有1个答案

赵涵亮
2023-03-14

promise背后的一个基本原则是它是异步处理的。这意味着您不能创建一个promise,然后立即在代码中同步使用它的结果(例如,不可能从启动promise的函数中返回promise的结果)。

你可能想要做的是回报整个promise本身。那么任何需要其结果的函数都可以在promise上调用.Then(),当promise被解析时,结果就会出现。

以下是HTML5Rocks中的一个资源,它贯穿了一个promise的生命周期,以及它的输出是如何异步解析的:
https://web.dev/promises/

 类似资料:
  • 问题内容: 我需要兑现承诺,以便可以通过封闭函数将其返回。我知道,由于正常的JavaScript范围,我可能无法按照编码的方式进行操作。有什么办法可以做到吗? 位于#1 的 console.log 会生成正确的数据。 console.log #2总是产生’a’; 任何指针将不胜感激。 问题答案: 许诺背后的基本原则之一是它是异步处理的。这意味着您无法创建承诺,然后立即在代码中同步使用其结果(例如,

  • 我试图使用庞大的Node.js包将文件从Docx转换为HTML。庞大的自述文件建议使用以下格式转换文件: 在函数中的任何位置放置语句将不允许我使用存储的html,但是我可以将正确的html内容输出到控制台。我需要关于如何返回/使用promise之外的html变量的建议,谢谢。

  • 问题内容: 我想使用这样的Promise来调用Google Maps Geocoding API: 当我调用函数请求时,我发现我得到了一个Promise而不是一个值: 为什么不答应。然后在返回值之前执行?我如何从这个承诺而不是另一个承诺中获得价值? 问题答案: 如果您依赖承诺来返回数据,则必须从函数中返回承诺。 一旦调用堆栈中的1个函数异步,那么要继续线性执行,所有要调用它的函数也必须异步。(异步

  • 函数getfile: 但我需要一个数组而不是这个promise的东西。怎么解决?

  • 问题内容: 我正在尝试编写一个函数(使用WebdriverJS lib),该函数遍历元素列表,检查名称并构建与该名称相对应的xpath定位器。我在这里简化了xpath定位器,所以不用注意。 我在这里面临的问题是:1)调用此函数返回未定义。据我了解,这是因为return语句不在其位置,而是:2)将其放置在同步代码通常可以正常工作的正确位置,不适用于异步承诺,因此调用此函数将返回相同的未定义,但是因为

  • 我从JS开始,实际上喜欢异步方面(来自Python),但我不确定为什么有些函数返回Promise。具体来说,下面使用的代码让我想知道返回了什么: 除了流之外,我们在之后得到的HTTP响应是一个文本块,客户端稍后会对其进行解释,以提取标题、正文和其他有趣的元素,作为HTTP内容分析的一部分。 关键是这个文本块是一块的,所以第一个已经有了整个响应——为什么JSON主体的解析是异步操作,不同于第二个?