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

q、 所有这些都不是为了多重promise而工作

司徒博容
2023-03-14
var xyzdeffered = $q.defer();
service1.getServiceDetail1($routeParams.id).then(function(promise) {
    xyzdeffered.resolve(promise);
});

var abcdeffered = $q.defer();
service2.getServiceDetail2($routeParams.id).then(function(promise) {
abcdeffered.resolve(promise);
});


$q.all([ xyzdeffered, abcdeffered ]).then(function(data) {

    $scope.variable = data;

});

我希望q.all中的变量只有在前两个promise得到解决后才能填充。但不幸的是,服务调用本身并没有返回数据,控制转移到q.all。我觉得这很奇怪,因为根据文档,只有当您的promise返回200个响应并得到解决时,才会调用q.all。我检查了对网络调用的分析,并发出了一些警报,以查看代码的顺序,发现q.all警报是第一个弹出的警报,然后其他promise得到解决。为什么一个简单的q.all实现不起作用,这真的让我很生气。。任何帮助都将不胜感激。

共有3个答案

金亦
2023-03-14

例如,您可以同步运行多个sq-lite查询,只需将查询数组(您可以传递任何内容)作为参数传递到此方法的调用中。

function methodThatChainsPromises(args,tx) {

    var deferred = $q.defer();

    var chain = args.map(function(arg) {

        var innerDeferred = $q.defer();

        tx.executeSql(arg,[], function(){    
            console.log("Success Query");
            innerDeferred.resolve(true);
        }, function(){
            console.log("Error Query");
            innerDeferred.reject();
        });

        return innerDeferred.promise;
    });

    $q.all(chain).then(
        function(results) {
            deferred.resolve(true)
            console.log("deffered resollve"+JSON.stringify(results));
        }, function(errors) {
              deferred.reject(errors);
              console.log("deffered rejected");
           });
           return deferred.promise;
        }
步浩壤
2023-03-14
$q.all([ xyzdeffered.promise, abcdeffered.promise ])
郜俊晤
2023-03-14

为什么不在第一次promise时直接调用$q.all?

$q.all([
    service1.getServiceDetail1($routeParams.id),
    service2.getServiceDetail2($routeParams.id)
]).then(function(data) {
    //Array of result [resultOfgetServiceDetails1, resultOfgetServiceDetails2]
    $scope.variable = data;
});
 类似资料:
  • 为了添加另一个信息,我有一个tasks表,它当然需要引用来跟踪分配给谁,我还有一个列跟踪创建任务的用户。这将分别是和。 虽然有更多的表引用回该键。我可能已经有8个推荐人了。我相信到目前为止我已经把它设计得很好了,但是根据我所提到的,这听起来好吗?

  • 问题内容: 对于Java的处理方式以及涉及到的数字和其他类型的数字,我有些困惑。例如: 输出(也许您应该先猜测一下): 这不能编译是可以预料的,是不同的对象。 令我有些惊讶的是,默认情况下9是an ,并且1)甚至没有编译。请注意,您不能将放入期望使用的方法中,但是在这里它们是相等的。 由于两个相同的原因,这令人惊讶,但似乎更糟。 不足为奇,因为自动装箱到和。 不足为奇,因为不同类中的对象不应该是。

  • 问题内容: 如何运行选择所有非null的MySQL查询?就像 我只需要删除所有内容即可吗? 问题答案: 您必须在每列上明确说明条件,例如

  • 我正在做一个forEach循环,它对Cloudinary进行API调用,我正在用响应数据构建一个数组。 一旦收集到数据,我需要将其发送到其他API。 在发送数据之前,我如何等待promise得到解决并收集数据? 这是我的代码:

  • 每个人都知道饼干桶三角桩接龙游戏。你拿一个钉子,跳过另一个,跳进一个空洞,目标是只剩下一个钉子。 在游戏板对象的代码中,我有一个函数,它改变了你当前用来跳转的peg。为了解决这个问题,我将其连接到一个变量。每次你改变当前的钉住并使用它跳跃时,这算是一次移动。这是一个非常基本的启发式搜索算法,我希望是一个搜索算法:探索所有可能的跳跃可用一个peg。如果没有找到回溯的解决方案,请更新当前的peg并重复

  • 我在汇编时做了一个脑力操翻译(在 使用此代码: 它打印Hello World!没有问题,请注意它几乎拥有您需要的一切:嵌套循环,您可以执行的所有命令(除了)。它仍然工作得非常好。 然而,当使用这段代码时(预期的输出也是Hello World!就像第一段代码一样): 它打印“n|1f14{g”(没有任何seg错误或非法指令)。我摸不着头脑,为什么这个代码不起作用,而另一个代码工作得非常好。我想我已经