AngularJS函数返回带有必需参数的承诺

AngularJS函数返回带有必需参数的承诺,angularjs,angular-promise,Angularjs,Angular Promise,简单的问题。 我已经构建了这个函数: // Gets the kit by id or slug var _getKit = function (id) { // Try to get our kit using our shared service return sharedKitService.get(id).then(function (response) { // Assign the response to our service s

简单的问题。 我已经构建了这个函数:

// Gets the kit by id or slug
var _getKit = function (id) {

    // Try to get our kit using our shared service
    return sharedKitService.get(id).then(function (response) {

        // Assign the response to our service
        service.models.kit = response;

        // Return our response
        return response;
    })
};
我想在函数中添加一个类似这样的检查:

// Gets the kit by id or slug
var _getKit = function (id) {

    // If we have no id, exit the function
    if (!id)
        return;

    // Try to get our kit using our shared service
    return sharedKitService.get(id).then(function (response) {

        // Assign the response to our service
        service.models.kit = response;

        // Return our response
        return response;
    })
};
// Gets the kit by id or slug
var _getKit = function (id) {

    // If we have no id
    if (!id) {

        // Defer our promise
        var deferred = $q.derfer();

        // Reject our promise
        deferred.reject();

        // Return our promise
        return deferred.promise;
    }

    // Try to get our kit using our shared service
    return sharedKitService.get(id).then(function (response) {

        // Assign the response to our service
        service.models.kit = response;

        // Return our response
        return response;
    })
};
但我知道这是行不通的,因为如果没有id,那么函数将不再产生承诺。 我知道我可以这样做:

// Gets the kit by id or slug
var _getKit = function (id) {

    // If we have no id, exit the function
    if (!id)
        return;

    // Try to get our kit using our shared service
    return sharedKitService.get(id).then(function (response) {

        // Assign the response to our service
        service.models.kit = response;

        // Return our response
        return response;
    })
};
// Gets the kit by id or slug
var _getKit = function (id) {

    // If we have no id
    if (!id) {

        // Defer our promise
        var deferred = $q.derfer();

        // Reject our promise
        deferred.reject();

        // Return our promise
        return deferred.promise;
    }

    // Try to get our kit using our shared service
    return sharedKitService.get(id).then(function (response) {

        // Assign the response to our service
        service.models.kit = response;

        // Return our response
        return response;
    })
};
但这似乎有点过分了。 有更简单的方法吗?

您只需使用

$q.reject();
从:

只需
返回$q.reject(原因)

这将返回立即被拒绝的承诺

您可以按以下方式编写函数以缩短时间

// Gets the kit by id or slug
var _getKit = function (id) {
    var deferred = $q.defer();
    // If we have no id
    if (!id) {
        // Reject our promise
        deferred.reject();
    } else {
        sharedKitService.get(id).then(function (response) {
            // Assign the response to our service
            service.models.kit = response;

            // Return our response
            deferred.resolve(response);
        });
    }
    return deferred.promise;
};