javascript - AngularJS : promises, 你能在使用.then() 后传回一个 promise 吗?

标签 javascript angularjs promise restangular angular-promise

我还是 Angular 的新手,所以我希望我在这里有正确的想法。

我目前有一个数据层服务,它使用 restangular 获取一些数据,然后返回一个 promise ,就像这样......

dataStore.getUsers = function (params) {
    return users.getList(params);
};

然后,调用此函数的我的 Controller 会收到一个 promise ,就像这样......

$dataStore.getUsers(params).then(function (response) {
    $scope.users = response;
}, function(response) {
    $log.error("Get users returned an error: ", response);
});

这运行良好,但我想在将其传回之前在我的数据存储区内使用 promise。我想使用 .then() 方法检查它是否失败并进行一些日志记录,然后,从成功函数和失败函数我想将原始 promise 返回给我的 Controller 。

然后我的 Controller 将能够像现在一样使用 .then() 方法,事实上,我根本不希望我的 Controller 代码发生变化,只是我的数据存储区代码。

下面是一些半伪代码,用于显示我希望我的数据存储函数执行的操作...

dataStore.getUsers = function (params) {

    users.getList(params).then(function (response) {
        $log("server responded")
        return original promise;
    }, function(response) {
        $log.error("server did not respond");
        return original promise;
    });

};

最佳答案

您的伪代码实际上离您不远。 promise 链:

dataStore.getUsers = function (params) {
    return users.getList(params).then(function (response) {
        $log("server responded")
        return response;
    }, function(failure) {
        $log.error("server did not respond");
        // change to throw if you want Angular lever logs
        return $q.reject(failure); 
    });

};

Controller 现在以相同的值被解析/拒绝。日志需要利用 promise ,因此您必须添加一个.then 处理程序来处理它。其他 promise 库对此有方便的方法,但 $q 在这方面是简约的。

或者,您可以使用更好的 catch 语法,并将错误传播到您的日志中:

dataStore.getUsers = function (params) {
    return users.getList(params).then(function (response) {
        $log("server responded")
        return response;
    }).catch(function(failure) {
        $log.error("server did not respond");
        throw failure;
    });

};

关于javascript - AngularJS : promises, 你能在使用.then() 后传回一个 promise 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22642330/

相关文章:

javascript - Chrome 扩展 - javascript 中的功能无法正常工作

javascript - JavaScript 中的 DOM 解析

javascript - 为什么我的异步函数返回 Uncaught TypeError : (intermediate value) is not iterable

angularjs - 使用 AngularJs 的可排序表格列

javascript - OpenLayers 3 删除功能不会从 map 中删除功能

html - 在多选中查看所选选项的短值

mysql - 使用 NodeJS 从 MySQL 数据库中检索数据并将其传递给 AngularJS 页面

javascript - Express/React promise 陷入停滞

javascript - typescript: error TS2693: 'Promise' 只引用了一个类型,但在这里被用作一个值

javascript - 无法获取 promise 函数的原始返回值