javaScript中的promise
我们在日常的学习中,会经常遇到这样的说法:JavaScript是非阻塞的。JavaScript是一门单线程语言。这就意味着,javaScript一次只能干一件事情。其他支持多线程的语言则可以一次运行多个进程。
我们在控制台运行下面的代码!
console.log('开始');
console.log('结束');
意料之中,按顺序输出了开始和结束。
如果我们在这中间使用setTimeout等待两秒钟!输出的结果呢?
console.log('开始');
setTimeout(function() {
console.log('等待两秒');
}, 2000);
console.log('结束');
输出的结果是开始-》结束-》等待两秒。和我们预想的不一样啊!他不应该是暂停两秒,输出等待两秒,在输出结束的嘛!
JavaScript并没有按照我们的想法执行。它先解析第一行代码,输出开始。然后解析遇到setTimeout。他会将setTimeout放到一个地方,然后继续解析下面的console。等两秒钟之后,javaSxript会继续执行setTimeout。这就是调用堆栈
promise
你可以将Promise看作是一个承诺!上面写着:我十分钟后会拿到我点的餐!
我们将这个改造成函数。
function bugFood() {
const foodPromise = new Promise();
return foodPromise;
}
Promise是立即做出的,但是我们的饭并不会立即拿到!
当我们做出承诺后,该如何去拿到我们的餐。这里有两个回调函数!
Promise 接受一个回调函数,该回调函数将给我们 2 个参数:
resolve
reject
function bugFood() {
const foodPromise = new Promise(function (resolve, reject) {
resolve("拿到饭了");
});
return foodPromise;
}
const food = bugFood();
console.log(food);
我们在控制台执行这段代码,我们会得到我们的饭吗?还是仍然得到承诺!
很遗憾,我们并没有拿到我们的饭!这是因为,我们只是告诉服务员,我们有一个resolve方法,我要通过这个方法拿到我们的饭!但是,此时,我们并没有真正的去服务员那里拿饭。
我们想要去拿饭,就要动起来。then就是我们做出承诺后,如何动起来。
food.then(function (food) {
console.log("我去拿饭了");
console.log(food);
});
此时,我们才真正的拿到我们的饭!
- 点赞
- 收藏
- 关注作者
评论(0)