创建一个没有返回值的AngularJS promise

Create an AngularJS promise with no return value

本文关键字:返回值 AngularJS promise 一个 创建      更新时间:2023-09-26

我使用$q将promise封装在遗留回调中。但是,现有回调没有要返回的值。它需要一个没有参数的成功函数。

angular.module('MyModule').service('MyService', function() {
    function initialize() {
        var deferred = $q.defer();
        LegacyFactory.initialize(
            // 'void' Success Callback
            function () {
                deferred.resolve (/* WHAT DO I PUT HERE? */);
            },
            // Error Callback
            function (errorCode) {
                deferred.reject(errorCode);
            });
        return deferred.promise;
    }
});

我在AngularJS文档中找不到resolvevoid版本。我可以返回一个伪值,但客户端可能会访问该伪值,这会导致混乱。

如何创建没有返回值的AngularJS承诺?

注意:AngularJS promise返回空对象的问题完全不同。该问题确实在resolve函数中返回了一个值。

JavaScript中没有void数据类型。相反,JavaScript使用基元类型undefined,用于表示尚未赋值的变量。

没有返回值的方法或语句将返回undefined。不使用return语句的函数将返回undefined。未传递给函数的参数将是undefined

我希望您开始在这里看到undefined的一致行为。

function foo(x) { console.log(x); }
foo(); // will print undefined
function zoom() {}
console.log(zoom()); // will print undefined

因此,当您使用deferred.resolve()时,您将传递undefined作为数据参数的值。

更具体地回答您的问题。

"如何创建无回报值的AngularJS承诺?"

编写JavaScript代码,使承诺不返回值。你会写这个的。

deferred.resolve(undefined);

这清楚地表明,没有预期的数据。

稍后在回调中,您不必定义数据参数,但如果您愿意,可以。

 foo().then(function(data){
     if(typeof data === 'undefined') {
          // there is no data
     } else {
          // there is data
     });

如果总是期望没有数据,那么就这样做。

foo().then(function(){
   // handle success
});