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

AngularJS:返回嵌套$HTTP的promise--已经找到了解决方案,但为什么它能工作?[副本]

柳宪
2023-03-14

我想构建一个嵌套的$http.get,在第一个成功后,再请求第二个。

然后我说出了这样的话:

$http.get('/xxx').then(function(response){
    $http.get('/yyy').then(function(response){
        //do something
    })
});

但我还是想回报一个promise,这样我就可以正确地组织我的代码了。显然上面的代码不能满足我的需要。

然后我用$Q.ALL()做了很多研究,但实际上用$Q.ALL,第二个请求不会等待第一个请求,即使第一个请求没有成功响应,它也会发送第二个请求。

之后,我找到了一个解决办法,在我的情况下,它就像一个魅力:

var promise = $http.get('/xxx').then(function(response1){
    return $http.get('/yyy').then(function(response2) {
        return response2.data;
    });;
});     
return promise;

但我不明白为什么它能起作用???

在first promise($http.get)的success函数中,它返回第二个promise作为then()函数的参数。

但如果我打电话

promise.then(function(data){
    console.log(data);
});

我发现这里打印的数据是response2.数据,怎么可能呢?它不应该是第二个$HTTP的Promise对象吗???

共有1个答案

狄兴业
2023-03-14

当您从promise.然后(…)回调返回promise时,promise库将自动等待内部promise解析,然后用该值解析返回的promise。

也就是说,你对一个promise做出promise,你就会拿回它内在的价值。

这是promise之美的一部分;您可以通过利用此特性并链接您的promise来减少嵌套:

var promise = $http.get('/xxx').then(function(response1) {
    return $http.get('/yyy');
}).then(function(response2) {
    return response2.data;
});

欲知更多详情,请参阅我的博客。

 类似资料:
  • 问题内容: 我正在努力克服JavaScript(特别是AngularJS)中的承诺。 我在服务中有一个函数,我们称它为,它检查是否已加载一些数据。如果有,我只希望它返回,否则,我们需要加载数据并返回promise: 我有另一个函数,然后调用如下函数: 我在这里的问题是,如果我们不需要在函数中加载数据,则不会返回promise,因此在其他函数中不会调用the 。这里的方法应该是什么-基本上,如果我们

  • 如果用非空数组调用promise.all或promise.race,它们将返回一个挂起的promise: 为什么promise。所有功能都是这样设计的?似乎没有很好的理由不一致,但也许我错过了什么。

  • 问题解决了在这种环境下

  • 所以最近我一直在努力思考并发问题。目前,我正在努力寻找读者作家问题的解决方案。 我有一个类文件,它计算读者/作家的数量,并有两个信号量。 当读卡器尝试读取时,只要有写入线程在写入,它就必须等待。当它进入readCount时,readerSemaphore中的readCount会增加 当一个编写器试图进入时,只要有多个读卡器,它就必须等待。当它进入时,获取writerSemaphore并增加writ

  • 假设返回一个promise,该promise应解析为某个服务返回的随机新闻条目,而返回一个promise,该promise应解析为传递文本的翻译。 现在,页面最初显示了一个加载微调器,我希望在所有promise(包括嵌套的翻译promise)完成(成功或失败)后隐藏该微调器: 这段代码a)不能正常工作,因为加载微调器有时会在promise解决之前消失,b)非常复杂。 如何正确地做到这一点?(配香草

  • 我是这里的初学者,这个代码在理论上应该是可行的,为你们这些很棒的家伙们帮我干杯! 13195的质因数是5、7、13、29。 600851475143的最大质因数是什么? 欧拉问题3