同步方法在promise示例中变成异步执行:
console.log(1); let p = new promise(resolve => { console.log(2); resolve(); console.log(3); }); console.log(4); p.then(() => { console.log(5); }); console.log(6);
输出:
由此,利用promise实现同步转异步函数:
1 function synctask() { // 同步任务函数 2 console.log('这是异步任务,没有按顺序执行'); 3 return 4; 4 } 5 6 function createasynctask() { // 利用promise创建异步任务 7 var p = new promise(function (resolve) { 8 resolve(); 9 }); 10 return p; 11 } 12 13 createasynctask() 14 .then(synctask) // 异步调用synctask 15 .then(function (num) { // 获取synctask函数返回值 16 console.log(num); 17 }); 18 19 console.log("我是用来陪衬的,虽然在后边,但是异步在我后边执行");
输出:
利用以上原理,封装一个同步转异步的函数:
1 // 把同步的任务转成异步任务 2 function createasynctask(synctask) { 3 return promise.resolve(synctask).then(synctask => synctask()); 4 } 5 6 function synctask() { // 同步任务函数 7 console.log('这是异步任务,没有按顺序执行'); 8 return 4; 9 } 10 11 createasynctask(synctask) // 将同步任务转为异步任务 12 .then(res => console.log(res));// 接收同步任务函数synctask的返回值res 13 14 console.log("我是用来陪衬的,虽然在后边,但是异步在我后边执行");
输出:
备注:promise.resolve的用法。
1 // 传递一个普通的值 2 let p1 = new promise(resolve => { 3 resolve('成功1!'); 4 }); 5 6 let p2 = promise.resolve('成功2!'); 7 8 function printcontent(params) { 9 console.log(params); 10 } 11 p1.then(printcontent); 12 p2.then(printcontent);
输出:
p1与p2相同,也就是说,两种生成promise的方式是等价的。
结果都是生成一个已经决议为成功的promise实例。
如对本文有疑问, 点击进行留言回复!!
offset、client、scroll (width,height、left,top、X,Y)
网友评论