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之前,它无法写入日志”假设单线程执行,这是没有理由的。控制台可能存在于它自己的进程中。