我想构建一个嵌套的$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对象吗???
当您从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