微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript-angular js结合了异步和同步代码

我正在使用角度资源模块来与我的restfull Web服务器一起工作.例如,我有一个返回10个元素的数组的方法,而我想做的就是将结果保存到一些称为books的javascript变量中(不在角度范围内).

所以我写了一个简单的方法,看起来像这样:

function getBooks(user_id) {
    var books = [];
    BookFactory.getBooks.query({ id: user_id }).$promise.then(function (result) {
        angular.forEach(result, function(i) {
            books.push(i);
        });
    });
    return books;
}

假设BookFactory.getBooks.query可以正常工作,并且确实返回10个元素.
因此,此函数内部有一个简单的逻辑,我只需将每个元素推入数组书即可.

我也有一个测试功能,用于测试getBooks()函数.这里是:

$scope.testGetBooksMethod = function (user_id) {
    var resut = getBooks(user_id);
    alert(resut.length);
};

警报中的结果将始终为0.我知道这部分代码

BookFactory.getBooks.query({ id: user_id }).$promise.then(function (result) {
            angular.forEach(result, function(i) {
                books.push(i);
            });
        });

异步工作,直到服务器请求得到处理,函数getBooks()返回一个空书本数组(如果我错了,请纠正我).

这是一个问题,我该如何编辑我的功能以使其正常工作.我想从休息中获取数据,用这些数据填充数组书,然后将其返回.

提前致谢.

解决方法:

您需要在此处使用Promise概念,控制器功能的te​​stGetBooksMethod将等到服务方法的getBooks完成其调用.为此,您需要从getBooks函数返回BookFactory.getBooks.query promise.数据检索后,将创建和创建书籍.将从getBooks方法返回.在调用getBooks方法时,您需要使用.then函数,该函数将继续执行链承诺事件,当从getBooks返回数据时,该then函数获取从您的服务返回的数据.

function getBooks(user_id) {
    var books = [];
    return BookFactory.getBooks.query({ id: user_id }).$promise.then(function (result) {
        angular.forEach(result, function(i) {
            books.push(i);
        });
        return books;
    });
}

控制者

$scope.testGetBooksMethod = function (user_id) {
    getBooks(user_id).then(function(resut){
        alert(resut.length);
    });
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐