当前位置: 首页 > 面试题库 >

如何从promise返回数据

白越
2023-03-14
问题内容

我需要response.data兑现承诺,以便可以通过封闭函数将其返回。我知道,由于正常的JavaScript范围,我可能无法按照编码的方式进行操作。有什么办法可以做到吗?

位于#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;
}

任何指针将不胜感激。


问题答案:

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

相反,您可能想做的是 返回整个承诺本身。然后,任何需要其结果的函数都可以调用.then()promise,并且在promise被解决时结果就在那里。

这是HTML5Rocks的资源,它遍历了Promise的生命周期,以及如何异步解决其输出: http
//www.html5rocks.com/zh-cn/tutorials/es6/promises/


 类似资料:
  • #1处的console.log生成正确的数据。console.log#2始终生成“a”; 如有任何指示,将不胜感激。

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

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

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

  • 有许多关于如何在使用JavaScript Promise编程时使用“然后”和“捕获”的教程。然而,所有这些教程似乎都忽略了一个重要的点:从然后/捕获块返回以打破promise链。让我们从一些同步代码开始来说明这个问题: 本质上,我正在测试一个捕获的错误,如果不是我期望的错误,我会返回给调用方,否则程序将继续。然而,这种逻辑在Promise中不起作用: 这种逻辑用于我的一些单元测试,我希望函数以某种

  • 我正在尝试访问秒napshot.data()返回的内容,但有一个问题,如下面的评论所述。我试图创建一个异步函数,但无济于事。知道出了什么问题吗?请查看2条评论。