在服务中使用promises但不返回承诺

时间:2015-05-04 08:47:12

标签: javascript angularjs promise

所以我正在创建一个服务,它向后端发送一条消息,检查数据库中是否已有特定的电子邮件地址。

userDB.emailExists = function()
{

    var returnVal;

    $http.get('?backend=users&email=myemail%40mydomain.com')
         .success(function(data) { returnVal = data.count ? true : false; })
         .error(function(data) { /* TODO error handling */ });

        returnVal = data.count ? true : false;
    });

    return returnVal;
};

现在,对此进行的单元测试(测试函数是否返回truefalse)与Expected undefined to be truthy.失败。我想我明白了;作为承诺只返回一个'占位符'所以当我们到达'return'语句时,returnVal尚未设置。

唯一的问题是,我不知道如何解决这个问题;我不想返回承诺,因为当结果是简单的真或假

时,这似乎是一个不必要的复杂层

1 个答案:

答案 0 :(得分:3)

  

唯一的问题是,我不知道如何解决这个问题;我不想回复承诺,因为当结果是简单的真或假时,这似乎是一个不必要的复杂层

来返回承诺(或接受回调) - 这只是在Angular和浏览器JavaScript中的异步i.o中进行编码的方式。请参阅this question for the conceptual explanation

从概念上讲,您所说的复杂性已经存在,因为您的函数在概念上不会返回true / false,它会执行网络请求并根据其结果返回true / false。

但是,您应该 - 返回true/false值的承诺和 $http请求:

userDB.emailExists = function() {
    return $http.get('?backend=users&email=myemail%40mydomain.com')
         .then(function(r) { return Boolean(r.data.count); });
};