JS 同步转异步之Promise

同步方法在promise示例中变成异步执行:

[url=][/url]
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);[url=][/url]
 

输出:
由此,利用Promise实现同步转异步函数:

[url=][/url]
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) // 异步调用syncTask15   .then(function (num) { // 获取syncTask函数返回值16   console.log(num);17 });18 19 console.log("我是用来陪衬的,虽然在后边,但是异步在我后边执行");[url=][/url]
 

输出:
利用以上原理,封装一个同步转异步的函数:

[url=][/url]
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的返回值res13 14 console.log("我是用来陪衬的,虽然在后边,但是异步在我后边执行");[url=]

 

[/url]
 

输出:
 

 

备注:Promise.resolve的用法。

[url=]

 

[/url]
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);[url=]

 

[/url]
 

输出:
 

p1与p2相同,也就是说,两种生成Promise的方式是等价的。
结果都是生成一个已经决议为成功的Promise实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值