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

Javascript 在服务中使用承诺,但不返回承诺,javascript,angularjs,promise,Javascript,Angularjs,Promise,因此,我正在创建一个服务,它向后端发送一条消息,以检查数据库中是否已经存在特定的电子邮件地址 userDB.emailExists = function() { var returnVal; $http.get('?backend=users&email=myemail%40mydomain.com') .success(function(data) { returnVal = data.count ? true : false; })

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

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;
};
现在,此函数的单元测试(测试函数是否返回
true
false
)失败,
预期未定义为truthy。
。我想我明白为什么;由于承诺只返回一个“占位符”,因此在我们到达“return”语句时,
returnVal
尚未设置

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

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

您必须返回承诺(或接受回调)——这只是Angular和浏览器JavaScript中异步i.o的编码方式。看

从概念上讲,您提到的复杂性已经存在,因为您的函数在概念上不返回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); });
};

您不能这样做,因为您正在进行异步调用。。。。看看怎么处理-