编程语言
首页 > 编程语言> > javascript-angular js结合了异步和同步代码

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);
    });
};

标签:angularjs,promise,angularjs-service,javascript,angular-promise
来源: https://codeday.me/bug/20191120/2041047.html