承诺链不能按预期工作

时间:2015-02-05 21:29:41

标签: javascript angularjs promise

使用下面的代码,我的控制器的publish()将始终转到createCompleted(),即使服务器返回500.我的印象是{400}将在400时执行或者从服务器返回500个代码。

//在服务中

catch()

//在控制器中

function create(item) {
    return $http
        .post(api, item)
        .then(createCompleted)
        .catch(createFailed);

    function createCompleted(response) {
        return response.data;
    }

    function createFailed(error) {
        $log.error('XHR Failed for create: ' + error.data);
    }
}

虽然控制器的function publish(item) { item.published = true; return itemService.create(item) .then(createCompleted) .catch(createFailed); function createCompleted(response) { alertService.add('success', 'success.'); $state.go('^'); } function createFailed(error) { alertService.add('error', 'failed'); } } 没有命中,但服务createFailed()始终会点击。

这里发生了什么?

1 个答案:

答案 0 :(得分:2)

那是因为你没有正确地传播错误。您需要抛出异常或明确拒绝createFailed函数。

function createFailed(error) {
    $log.error('XHR Failed for create: ' + error.data);
    throw error;
    // or
    return $q.reject(error); // inject $q
}

因此,在您的情况下,由于您没有返回任何内容,因此假定从返回的promise中使用值" undefined"来解析它。