为什么不't运行此promise调用之后的代码
Why doesn't the code after this promise invocation run?
当我试图在将函数交给promise后添加任何代码以在它完成时运行时,它永远不会运行。请参见此示例。
(function() {
var url = //some url that I know works
var promise = $.get(url);
$.when(promise).then(function(xml) {
alert("Promise resolved.");
})();
//This code doesn't run!
alert("Code after promise.");
})();
我认为执行立即进入$.when
之后的下一行。这不是承诺的全部意义吗?"承诺已解决"警报会正常运行,但"承诺后的代码"从未出现。我错过了什么?
此块之后有一个不必要的()
:
$.when(promise).then(function(xml) {
alert("Promise resolved.");
})();
更改为:
$.when(promise).then(function(xml) {
alert("Promise resolved.");
});
其中一条注释指出,在代码的开头需要一个$
。这不是真的。您只是在这里创建一个闭包,这是完全可以接受的语法。但是,我建议在脚本前面加一个;
,这样,如果它包含在任何其他闭包之后,就可以确保它们是关闭的。在JavaScript中使用闭包时,这通常是一种很好的做法。
(function(){
var url = //some url that I know works
var promise = $.get(url);
//********************************
$.when(promise).then(function(xml){
alert("Promise resolved.");
}); // take this () off
//********************************
//This code will run first
alert("Code after promise.");
})();
相关文章:
- 函数在promise被解析后被调用,但Jasmine未通过测试.为什么?
- AngularJS和promise值在调用本地函数时的效果-未定义
- 多次调用方法后返回相同promise的模式
- 我如何防止错误“;未捕获(在promise中)DOMException:play()请求被对pause()的调用中断&”
- 多次调用promise函数,直到另一个promise函数满足条件
- bluebird promise catch() 没有使用 Promise.CancelError 调用内部函数
- 使用 Promise 在另一个函数中调用带有 Bluebird 承诺库的函数
- JavaScript Promise 解析并拒绝函数调用序列
- 使用promise或setTimeout确定延迟函数的调用顺序
- 使用Node中的Q promise库对值数组顺序调用/执行相同的函数;并返回带有结果的新数组/集合
- Javascript Promise().然后防止在执行第一个调用之前重新调用该函数
- 当使用promise时,为什么最后一个会被调用
- 在循环中调用Bluebird Promise函数
- 带有拒绝调用和抛出错误的Promise构造函数
- 如何在循环中调用Promise函数并保存其返回值
- 然后,在前一个完成之前调用 Promise
- 在另一个函数中调用promise函数时出错
- 在for循环结束时调用promise
- 链接2个异步调用(promise API)以串行运行
- ' fetch ', work with mode ' no-cors '不会调用promise.然后回调