【问题标题】:Use promises within service but NOT returning a promise在服务中使用承诺但不返回承诺
【发布时间】:2015-05-04 08:47:12
【问题描述】:

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

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. 失败。我想我明白为什么了;作为一个承诺只返回一个“占位符”,所以在我们到达“返回”语句时,returnVal 尚未设置。

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

【问题讨论】:

标签: javascript angularjs promise


【解决方案1】:

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

必须返回承诺(或接受回调) - 这就是在 Angular 和浏览器 JavaScript 中的异步 i.o 中完成编码的简单方式。见this question for the conceptual explanation

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

但是,您应该 - 为 true/false 值返回一个承诺,而不是 $http 请求:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    相关资源
    最近更新 更多