【问题标题】:AngularJs empty resultAngularJs 空结果
【发布时间】:2016-07-12 06:13:42
【问题描述】:

我有 2 个factory 函数:

工厂

factory.getCurrEmployee = function()
{
    data = {"api_token": authenticationFactory.getToken()};
    url = GLOBALS.url + 'show/employee/' + $cookieStore.get('employeeid');
    return requestFactory.post(url, data)
        .then(function (response) {
            return response.data.result.Employee;
        }, function () {
            $window.location.assign('/');
        });
}

factory.isSuperadministrator = function() {
    factory.getCurrEmployee().then(function (employee) {
        if(employee.Role == 'Superadministrator')
        {
            return true; //console.log('Superadministrator')    <- that console.log is visible in my console
        }
        return false;
    });
}
return factory;

在我的控制器中,我希望是真或假(用户是否是超级管理员),但结果什么都没有。如果我 console.log 在我的 factory.isSuperadministrator 中结果为真。

控制器

console.log(employeeFactory.isSuperadministrator());

为什么这不起作用?

【问题讨论】:

  • 它是异步的。您返回的承诺不是布尔值。
  • @ste2425 那些Boolean 的值永远不会被返回,直到承诺被返回。因为boolean已经从回调函数返回。
  • @PankajParkar 是的,但是 OP 在其调用控制器代码中没有使用 .then 而是在服务回调中返回预期值这一事实表明潜在地缺乏关于承诺链如何工作的知识.这就是为什么我说他返回的是一个承诺而不是他的回调中的值。
  • @ste2425 道歉.. 我误解了。虽然欢呼..我认为,OP得到了他想要的:-)

标签: javascript angularjs promise angular-promise angularjs-http


【解决方案1】:

factory.isSuperadministrator 函数中无法从factory.getCurrEmployee 返回承诺。我还做了一些小的重构,让你的代码更智能。

factory.isSuperadministrator = function() {
    return factory.getCurrEmployee().then(function (employee) {
        return employee.Role == 'Superadministrator';
    });
}

但上面的事情并不能解决你的问题,它只会在console 中的print 承诺对象。为了进一步解决您的问题,您需要将带有回调的.then 函数放在employeeFactory.isSuperadministrator() 返回的promise 上,如下所示

控制器

employeeFactory.isSuperadministrator().then(function(data){
   console.log(res);
});

请遵循this answer 中所述的相同准则

【讨论】:

  • 在调用控制器代码时仍需要.then
  • @ste2425 你能看看参考答案
  • 当我发表评论时,您的回答中没有。
  • @PankajParkar 再次感谢。但是现在我必须一次又一次地在每个控制器中执行 if 语句,对吗?
  • @jamie 这就是你应该如何处理 promise(asynchronous) 代码。你应该遵循它的常规模式。谢谢:-)
【解决方案2】:

试试

employeeFactory.isSuperadministrator().then(function(res){
console.log(res);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 2016-07-09
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    相关资源
    最近更新 更多