liujsim / blog

blog
https://github.com/liujsim/blog/issues
MIT License
1 stars 0 forks source link

js snippets 合集 #8

Open liujsim opened 6 years ago

liujsim commented 6 years ago

promise

Promise 的重点是形成 Promise 链, then 的函数要返回具体的对象或者 Promise 作为下一个传递


let p = new Promise((resolve, reject) => {
  setTimeout(resolve, 1000, "step1");
});

p.then(data => {
  console.log(data);
  return new Promise((resolve, reject) => {
    setTimeout(resolve, 1000, "step2");
  });
}).then(data => {
  console.log(data);
  return new Promise((resolve, reject) => {
    setTimeout(resolve, 1000, "step3");
  });
}).then(data => {
  console.log(data);
  return new Promise((resolve, reject) => {
    setTimeout(reject, 1000, "step4");
  });
}).catch(reason => {
  console.log(reason);
});

promise 参考

function runAsync1(){
    var p = new Promise(function (resolve, reject){
        //做一些异步操作
        setTimeout(function(){
            console.log('异步任务1执行完成')
            resolve('随便什么数据1')
        }, 1000)
    })
    return p            
}
function runAsync2(){
    var p = new Promise(function(resolve, reject){
        //做一些异步操作
        setTimeout(function(){
            console.log('异步任务2执行完成');
            resolve('随便什么数据2');
        }, 2000);
    });
    return p;            
}
function runAsync3(){
    var p = new Promise(function(resolve, reject){
        //做一些异步操作
        setTimeout(function(){
            console.log('异步任务3执行完成');
            resolve('随便什么数据3');
        }, 2000);
    });
    return p;            
}

runAsync1()
.then(function(data){
    console.log(data);
    return runAsync2();
})
.then(function(data){
    console.log(data);
    return '直接返回数据';  //这里直接返回数据
})
.then(function(data){
    console.log(data);
});

Promise.resolve

Promise.resolve(value)方法返回一个以给定值解析后的Promise对象

var promise1 = Promise.resolve([1, 2, 3]);

promise1.then(function(value) {
  console.log(value);
  // expected output: Array [1, 2, 3]
});
liujsim commented 6 years ago

async 和 await

function getFirstName() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('hello');
      resolve('hello');
    }, 2000);
  });
}

function getLastName() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('world');
      resolve('world');
    }, 1000);
  });
}

async function say() {
  let firstName = await getFirstName();
  let secondName = await getLastName();
  return firstName + secondName;
}

console.log(say());