我们写一个函数,只要调用此函数,并传入字符串。
就会建立并返回一个Promise类型的实例。
// 本函数实现的是返回一个promise实例,把传进来的参数字符串作为成功时候的捕获值
function doapi(string){
let p = new Promise(
(resolve,reject)=>{
setTimeout(()=>{
typeof string == 'string' && resolve(string);
},10000)
}
)
return p;
}
promise实例可以说是一个对象,把它想象成一个人,你让他内部去做事情,去成长,他可能要10秒才能成长完,也可能2秒,就是可能2-10秒。
并指定他成长完成后的回调函数。就是指定他成长完成后就会紧接着去做什么事情。
就是在promise.then( () => {//函数体});
例如
doapi('一斤龙虾')//调用函数,返回一个promise实例,这里称为第1个promise实例
//给promise实例设置回调函数
.then(
(a) => {
//拿到a
console.log( a )
}
)
//以上第1个promise实例的then方法返回的是一个不用做什么异步操作的promise实例,这里称为第2个promise实例,
//因为“不用做什么异步操作”所以第2个promise实例已经是完成状态,
//给以上返回的这第2个promise实例指定回调函数,它不会往回调里传递参数,因为“不用做什么异步操作”
.then(
(a) => {
console.log(a);//undifend
}
)
在浏览器控制台里可以看返回值
1.当我们调用doapi函数时候
返回一个promise实例
为了方便查看此promise对象实例的状态变化,我用变量来储存他的地址
promise实例调用then方法指定回调函数,then函数的返回值是一个新的建立的promise实例。这里称为第2个promise实例,这第2个promise实例默认是完成状态的,就是没有捕获值,就是说你可以给它的then里指定回调函数
let doapi03 = doapi('一斤龙虾')//调用函数,返回一个promise实例,这里称为第1个promise实例
//给promise实例设置回调函数
.then(
(a) => {
//拿到a
console.log( a )
return '2斤肥牛'
}
)
//返回新建立的第2个promise实例,这个promise的成功时的值为上一个then里return的值,默认是undefined,这里return的是'2斤肥牛'
//以下给这第2个promise实例指定回调函数,这个promise实例的“成功值”会传进去回调函数里
.then(
(a) => {
console.log(a);//'2斤肥牛'
}
)
//返回一个第3个promise实例,其成功值是默认值undefind
//then方法的返回值默认是一个promise对象,不过没有传出的值,就是没有捕获值,如需捕获值要手动return返回
转载于:https://www.jianshu.com/p/1b263edc9768