Promise
Promise 对象用于表示一个异步操作的最终完成(或失败)及其结果值。
promise可以绑定在一个回调函数上,这样我们就不需要将回调函数作为参数传入这个函数 那么我们可以举个例子,来简单理解一下怎么来使用
//假设我们有Information(),接收一些配置和两个回调函数,然后异步返回信息。一个回调函数在文件成功创建时被调用,另一个则在出现异常时被调用。
// 成功的回调函数
function successCallback(result) {
console.log("信息发送成功:" + result);
}
// 失败的回调函数
function failureCallback(error) {
console.log("信息发送失败:" + error);
}
//函数将返回三个值
Information(someting,successCallback,failCallback)
我们升级一下使用.then方法重写为Promise
//声明一个Promise并赋值
const promise = Information(someting)
promise.then(successCallback,failCallback)
使用.then()优点:
-
在本次循环完成之前,回调函数不会被调用
-
即使异步操作已经完成(成功或失败),在这之后通过 [
then()]添加的回调函数也会被调用 -
通过多次调用[
then()]可以添加多个回调函数
异步操作
新手,在日常使用中如果想进行异步操作,就非常容易造成回调地狱:
sayhello("one", function () {
sayhello("two", function () {
sayhello("three", function () {
console.log("end");
});
});
});
那么该怎么办呢?----->[链式调用]可以解决这个问题
链式调用
连续执行两个或者多个异步操作是一个常见的需求,在上一个操作执行成功之后,开始下一个的操作,并带着上一步操作所返回的结果。我们可以通过创造一个 Promise 链来实现这种需求。
then()函数返回的的是与之前不同的一个新的promise
const promise = someting()
const promise2 = promise.then(successCallback, failureCallback);
我们可以把回调函数绑定到promise上,形成一个promise链:
typeScript("one.js")
.then(script1 => {
typeScript("two.js")
.then(script2 => {
typeScript("three.js")
.then(script3 => {
one();
two();
three();
});
});
});
在这里,我们使用箭头函数来重写
typeScript("one.js")
.then(function(script) {
return typeScript("two.js");
})
.then(function(script) {
return typeScript("three.js");
})
.then(function (script) {
one();
two();
three();
});
这样看,是不是箭头函数写起来更简洁结合方便一些 好了,我们来写一个简单的promise实例:
// 假设结果为真
const isTrue = true;
const promise = new Promise((resolve, reject) => {
// 进行判断
if (isTrue) {
resolve('成功')
} else {
reject('失败')
}
})
promise
// 获取成功
.then(s => {
console.log(`这个函数已经被调用${s}`)
})
// 获取失败
.catch(e => {
console.log(`这个函数未被调用${e}`)
})
//无论返回的结果是什么,都会返回这个
.finally(y=>{
console.log(`这是另外的价钱`)
})
将会返回:
通常我们使用promise,只需要调用一次,提当抛出异常时,浏览器就会顺着找到失败的[.Catch]函数、回调函数。如果想更加深入一点了解promise那么就直接点击下面链接
[](Promise - JavaScript | MDN (mozilla.org))