$ .ajax承诺'然后'不像我期望的那样链接

时间:2014-10-17 20:15:36

标签: jquery jquery-deferred

以下是我的代码。第一个控制台消息显示结果,第二个控制台消息没有显示...这不是神奇地违背承诺......这怎么可能?

    this.saveAsTemplate = function(name, asNew) {
        return _saveSet(name, asNew)
            .then(function(result) {
                // -> result is set correctly
                console.log('oh but youll ****ing work... wth?', result);
                $.ajax({
                    url: '/rest/filter/template/'+result.id,
                    type: 'PUT',
                }).success(function(result) {
                    console.log('successfully saved template, result: ', result);
                });
            })
            .then(function(result) {
                // -> result is undefined :(
                console.log('no ****ing result: ', result);
            });

在过去的几个月里,我一直在为了解决这个问题而不得不写下额外的延期...这真的搞乱了我的代码。非常感谢帮助!

编辑:在这个问题中可以找到正确链接承诺的一个很好的清晰示例解决方案:(注意一切函数返回) How do I chain three asynchronous calls using jQuery promises?

1 个答案:

答案 0 :(得分:4)

要让.then以这种方式进行链接,你必须向它返回一个承诺。

return $.ajax({

完整样本:

this.saveAsTemplate = function(name, asNew) {
    return _saveSet(name, asNew).then(function(result) {
        console.log('oh but youll ****ing work... wth?', result);
        // *** The following line was modified ***
        return $.ajax({
            url: '/rest/filter/template/'+result.id,
            type: 'PUT',
        }).done/*success*/(function(result) {
            console.log('successfully saved template, result: ', result);
        });
    }).then(function(result) {
        console.log('no ****ing result: ', result);
    });