Promise 的使用
回调地狱
首先我们了解一下 Promise
出现的背景,假设有下面的程序
let name = getUserNameById(id);
let score = getScoreByName(name);
let scholarship = getScholarshipByScore(score);
console.log(scholarship);
这个程序首先根据 id
去获取名字,接着根据拿到的名字取获得分数,最后根据分数去获取奖学金,最后打印出奖学金。但是这个程序真的能达到预期的效果吗? 答案是不能,因为 JavaScript
是异步的,对于一般的耗时操作并不会立即执行,而是将函数保存在一个队列中,直到代码执行完毕,才会拿出队列中的函数执行。所以上面的函数都不会被立即执行,所以当然没有返回值,所以上面的 name, score, scholarship
都是 undefined
。
为了解决这种情况,我们一般会使用回调函数的形式,等我们根据 id
拿到 name
之后,将 name
传入回调函数,这样就可以保证"同步"的效果,所以我们将上面的代码修改如下
getUserNameById(id, function (name) {
getScoreByName(name, function (score) {
getScholarshipByScore(score, function (scholarship) {
console.log(scholarship);
});
});
});