当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JS 同步转异步之Promise

JS 同步转异步之Promise

2020年05月05日  | 移动技术网IT编程  | 我要评论

同步方法在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实例。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网