我正在尝试用JavaScript来研究promise对象。 这里我有一小段代码。 我有一个promise
对象,在promise对象的两侧有两个console.log()
。 我以为它会印出来
嗨
那里
扎米
但它是印刷的
HI
zami
there
为什么会这样? 我对promise是如何工作的理解为零,但我了解异步回调在JavaScript中是如何工作的。 有谁能解释一下这个问题吗?
console.log('hi');
var myPromise = new Promise(function (resolve, reject) {
if (true) {
resolve('There!');
} else {
reject('Aww, didn\'t work.');
}
});
myPromise.then(function (result) {
// Resolve callback.
console.log(result);
}, function (result) {
// Reject callback.
console.error(result);
});
console.log('zami');
Promise执行是异步的,这意味着它被执行了,但是程序不会等到它完成后再继续执行其余的代码。
基本上,您的代码正在执行以下操作:
如果你想让它印上“你好,扎米”,你必须这样做
myPromise.then(function (result) {
// Resolve callback.
console.log(result);
console.log('zami');
}, function (result) {
// Reject callback.
console.error(result);
});
Javascript中的promise是表示异步操作最终完成或失败的对象。 承诺表示一个值的代理,该值将在未来的某个时间点得到。
一个承诺可以有以下三种状态:
我们可以通过以下方式创建一个承诺:
null
let prom = new Promise((res, rej) => {
console.log('synchronously executed');
if (Math.random() > 0.5) {
res('Success');
} else {
rej('Error');
}
})
prom.then((val) => {
console.log('asynchronously executed: ' + val);
}).catch((err) => {
console.log('asynchronously executed: ' + err);
}).finally(() => {
console.log('promise done executing');
});
console.log('last log');
即使您是同步解析承诺的,您传递给然后
的处理程序也会异步调用。 这是根据定义的规范:
OnFullished和onRejected在调用then的事件循环之后异步执行,并使用新堆栈