Javascript $q和承诺';地位
考虑以下代码:Javascript $q和承诺';地位,javascript,angularjs,angular-promise,Javascript,Angularjs,Angular Promise,考虑以下代码: var qq=$q(function(resolve, reject) { setTimeout(function() { if (true) { console.log(qq); resolve('Hello!'); console.log(qq); } else { ... } }, 5000); }); co
var qq=$q(function(resolve, reject) {
setTimeout(function() {
if (true) {
console.log(qq);
resolve('Hello!');
console.log(qq);
} else {
...
}
}, 5000);
});
console.log(qq);
有三个
console.log
命令。首先执行最后一个,并正确输出状态为0的承诺对象。我在等待console.log
内部setTimeout
输出一个状态为挂起(0)的承诺对象,因为它位于解析之前。但是,setTimeout
中的两个console.log
命令都输出一个状态为1的已解决承诺。有人能给我解释一下吗 浏览器中的控制台始终显示当前对象状态。使用JSON.stringify记录,或者直接记录承诺状态,而不是objectYup。浏览器记录对对象的引用,但在脚本生成CPU之前,它无法写入日志。脚本结束(或以其他方式产生CPU),日志条目被解析。您能发布一个屏幕截图吗?尽管您描述的有点奇怪,但请看一看。@Amy“在脚本产生CPU之前,它无法写入日志”假设单线程执行,这是没有理由的。控制台可能位于其自己的进程中。浏览器中的控制台始终显示当前对象状态。使用JSON.stringify记录,或者直接记录承诺状态,而不是objectYup。浏览器记录对对象的引用,但在脚本生成CPU之前,它无法写入日志。脚本结束(或以其他方式产生CPU),日志条目被解析。您能发布一个屏幕截图吗?尽管您描述的有点奇怪,但请看一看。@Amy“在脚本产生CPU之前,它无法写入日志”假设单线程执行,这是没有理由的。控制台可能存在于它自己的进程中。