从服务中返回承诺

时间:2017-03-29 13:07:26

标签: angularjs

我有这样的服务,我喜欢这个

userRes.getCurrentUser = () => {
    return userRes.get({
        user: 1
    });
};

我在我的控制器中使用了这个

console.log(currUserService.getCurrentUser());

并且它工作正常,我得到了一个承诺和解决后的对象

BUT

我想在获取数据后创建一个类,所以我喜欢这个

userRes.getCurrentUser = () => {
    userRes.get({
        user: 1
    }).$promise.then(data => {
        return new User(data);
    });
};

然后我得到undefined

如何让它返回课程?

谢谢

修改

let userRes = $resource('url', {}, {});

3 个答案:

答案 0 :(得分:0)

我不确定userRes到底是什么,但一般来说,.then()会返回其保证链。

更改

userRes.getCurrentUser = () => {
    userRes.get({
        user: 1
    }).$promise.then(data => {
        return new User(data);
    });
};

userRes.getCurrentUser = () => {
    return userRes.get({ // !! Notice the return statement here
        user: 1
    }).$promise.then(data => {
        return new User(data);
    });
};

会为您提供承诺链,您可以添加另一个.then()以使用之前返回的新User

答案 1 :(得分:0)

在上一个示例中,它不返回任何内容,您应该通过添加return返回Promise。

在服务中返回Promise<User>之后,在您调用它的类中,您应该执行以下操作:

var userPromise = currUserService.getCurrentUser(); // Promise<User> type
userPromise.then(user => { /* do something with the user when it is resolved*/});

答案 2 :(得分:0)

在您的控制器脚本中,currUserService.getCurrentUser()将在不处理promise的情况下运行该函数。事实上,它什么都不会返回。

 console.log(currUserService.getCurrentUser());

要正确使用$ promise,您可以返回$ promise,如

return userRes.getCurrentUser = () => {
    userRes.get({
    user: 1
}).$promise.then(data => {
    return new User(data);
});  // end of this chain is another $promise

};

现在在你的控制器中你可以做到这一点

currUserService.getCurrentUser().then( user =>{
    console.log(user);
});