AL-*_*ami 18 javascript promise
我试图在javascript中包围promise对象.所以我在这里有一小段代码.我有一个promise对象和两个console.log()在promise对象的两边.我以为它会打印
你好
那里
zami
但它打印出来了
HI
zami
there
Run Code Online (Sandbox Code Playgroud)
为什么它就像那样.我对如何工作没有任何理解,但我理解异步回调在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');
Run Code Online (Sandbox Code Playgroud)
Alb*_*era 16
Promise执行是异步的,这意味着它已被执行,但程序不会等到它完成后继续使用其余的代码.
基本上,您的代码执行以下操作:
如果你想要它打印'嗨那里,zami',你将不得不
myPromise.then(function (result) {
// Resolve callback.
console.log(result);
console.log('zami');
}, function (result) {
// Reject callback.
console.error(result);
});
Run Code Online (Sandbox Code Playgroud)
Javascript中的promise是一个对象,代表异步操作的最终完成或失败。承诺代表了某个价值的代理,该价值在将来的某个时候会越来越流行。
一个承诺可以具有以下三种状态:
我们可以通过以下方式创建承诺:
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');Run Code Online (Sandbox Code Playgroud)
兴趣点:
then方法将回调作为第一个参数,该回调在实现诺言时异步执行。then方法以第二个参数作为回调,该回调 在承诺被拒绝时异步执行。但是,我们通常catch为此使用方法(因为它比较冗长),该方法还接受了一个在答应拒绝时异步执行的回调 。catch基本上与相同then(null, failCallback)。then回调接收作为第一个参数的解析值(在这种情况下,字符串“成功”)。catch回调接收作为第一个参数的否决值(字符串在这种情况下“错误”)。finally方法接收一个回调,该回调在promise实现和拒绝上都执行。在这里,我们可以编写“清除”代码,无论承诺结果如何,该代码都必须始终执行。在您的代码中,“ Zami”被打印在“ there”之前,因为记录“ there”的日志位于then回调函数中。前面我们指出,这些回调是异步执行的,因此将在最后执行。