使用服务中的承诺,但没有返回一个承诺(Use promises within service but

2019-10-22 23:11发布

所以我创建这将消息发送到后端服务来检查特定的电子邮件地址是否已在数据库上。

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还没有确定呢。

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

Answer 1:

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

必须返回的承诺(或采取回调) -这简直是如何编码在异步IO一般做过角和浏览器的JavaScript。 见的概念解释了这个问题 。

概念上,你说的复杂性已经在那儿了,因为你的函数概念没有返回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); });
};


文章来源: Use promises within service but NOT returning a promise