首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >链接后续的承诺,并等待所有承诺的解决

链接后续的承诺,并等待所有承诺的解决
EN

Stack Overflow用户
提问于 2014-10-14 21:39:01
回答 2查看 432关注 0票数 1

我已经阅读了一些关于承诺的文章和问题,但我仍然无法理解它们。这是我想要做的:

我的应用程序应该从设备请求属性。属性可以表示为单个值,也可以表示为数组。每个属性都有属性,这些属性给我提供有关它的信息(比如它是一个数组吗,它是可写的吗,等等)。

所以我的第一个尝试是先读取属性的属性。因此,我可以查看是否需要读取单个值或数组(例如)。

一切都与websockets一起工作,所以我没有使用angulars $http服务。

代码语言:javascript
复制
var valueRequests = [];

angular.forEach(properties, function (property, key) {

    requestPropertyAttributes(property).then(function (result) {

        if (result.isList) {

            valueRequests.push(requestPropertyList(property));
        }
        else {

            valueRequests.push(requestPropertyValue(property));
        }
    });
});

$q.all(valueRequests).then(function () {

    //do sth. after all data was read
});

好吧,我得到的只是一些错误(它显示list where are value和/或反之亦然),并且$q.all()不会触发。

我的请求函数返回承诺。

这是正确的尝试,还是我在某处失败了?正如我所说的,我对promises不是很确定,所以我在理解这里的机制时可能会有问题。

感谢您的帮助:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-14 21:55:45

您需要在第一个then中返回内部承诺,然后将该承诺添加到列表中。

代码语言:javascript
复制
var valueRequests = [];

angular.forEach(properties, function (property, key) {

    valueRequests.push(requestPropertyAttributes(property).then(function (result) {

        if (result.isList) {

            return requestPropertyList(property);
        }
        else {

            return requestPropertyValue(property);
        }
    }));
});

$q.all(valueRequests).then(function () {

    //do sth. after all data was read
});
票数 4
EN

Stack Overflow用户

发布于 2014-10-14 21:56:56

现在还不太清楚你到底在尝试什么。但是,我认为您需要更改代码,如下所示:

代码语言:javascript
复制
var valueRequests = [];

angular.forEach(properties, function (property, key) {

    valueRequests.push(requestPropertyAttributes(property).then(function (result) {

        if (result.isList) {

            return requestPropertyList(property);
        }
        else {

            return requestPropertyValue(property);
        }
    }));
});

$q.all(valueRequests).then(function () {

    //do sth. after all data was read
});

这应该确保在解决所有其他承诺之前,不会触发附加到$q.all的。如果您从then(...)返回一个承诺函数,然后(...)返回那个承诺。否则,它会创建一个promise并返回该promise,而该promise与您的web请求无关。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26362295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档