【发布时间】:2014-10-17 20:15:36
【问题描述】:
下面是我的代码。第一个控制台消息显示结果,第二个没有...这不是神奇地违背承诺...这怎么可能?
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);
});
在过去的几个月里,我不得不编写额外的 deferreds 来解决这个问题……这真的把我的代码弄乱了。非常感谢您的帮助!
编辑:可以在这个问题中找到正确链接承诺的一个很好的清晰示例解决方案:(注意所有函数返回) How do I chain three asynchronous calls using jQuery promises?
【问题讨论】:
-
您应该将
.success替换为.done,.success已弃用。 (不要与success:fn混淆) -
您的代码已损坏。为什么人们认为问题总是出在由一群知道自己在做什么的专业人士组成的庞大社区编写的外部库上,而不是出在他们自己只有一个人看过的有缺陷的代码上?不,您还没有在 jQuery 中发现错误。您在自己的代码中编写了一个错误。
-
哇,我在他的问题中没有看到任何暗示他在指责外部库的内容。
-
你很容易微薄,我不怀疑我误解了 jquery ajax 承诺的工作方式。我正在寻找帮助我理解我做错了什么的人。凯文,感谢您的提醒(虽然代码现在可以工作,但我想它会在未来的版本中中断,所以为解决可能会在 2015 年出现的错误而欢呼=P)。