看看this JsFiddle :
var requests = [
$.ajax("http://search.twitter.com/search.json", { data: { q: 'ashishnjain' }, dataType: 'jsonp' })
.done(function() {console.log("request");}),
$.ajax("http://search.twitter.com/search.json", { data: { q: 'ashishnjain' }, dataType: 'jsonp' })
.done(function() {console.log("request");})
];
$.when(requests).done(console.log("alldone"));
预期的输出是:request request alldone
,但实际上它打印的是alldone request request
。
这段代码中实际上有两个错误(如果您喜欢那种东西,就留作练习),但最终我认为这是因为 JavaScript 和 jQuery 在给定毫无意义的参数时都非常宽松。在这种环境下,“正确”的事情似乎是“做某事或什么都不做,不要抛出错误!”。
看到这段代码通过了 JsLint,并且只花了我几个小时来调试(真正的代码当然要复杂几个数量级),我想知道还有什么我可以做些什么来减少浪费时间在这种毫无根据的宽大处理上。这不是一个孤立的例子。它似乎一遍又一遍地发生。有什么建议吗?
最佳答案
这实际上是可能的 check types在 Javascript 的运行时,只是严格不是 Javascript 的首选风格。 JS 黑客喜欢把它挂起来。
不过,其他黑客可以应对这种情况,对吗?因此,与其将您花费大量时间调试此问题归咎于语言或 jQuery,我建议您研究其他方法来减少调试工作。
这里有一些我能想到的建议:
- 先在交互式 JS 控制台中测试一小段代码,然后再将其粘贴到您的 .js 文件中:这个
- 允许你快速迭代直到你做对(你如何使用 $.when() ?)
- 确保当您做对时,您了解如何使用 API
- 继续学习 JS,并继续编写更多 JS。您犯的第二个错误:未将 console.log("all done") 包装在函数中表明关于 JS 的基本概念尚未完全确定 - 经验丰富的 JS 黑客永远不会犯这样的错误。
关于javascript - 如何减少我的代码中出现此类错误的频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7717125/