Promise

作者: xczq | 来源:发表于2022-12-29 10:17 被阅读0次

Promise

function sleep(t){
  return new Promise((resolve)=>setTimeout(resolve,t))
}
console.time("休眠1秒");
sleep(1000).then(()=>console.timeLog("休眠1秒"))

Promise.resolve

Promise.resolve(1).then(console.log); // 输出1
new Promise((resolve,reject)=>resolve(1)).then(console.log); // 输出1

Promise.reject

Promise.reject(1).catch(console.error); // 输出错误1
new Promise((resolve,reject)=>reject(1)).catch(console.error); // 输出错误1

Promise.all


function sleep(t){
  return new Promise((resolve)=>setTimeout(resolve,t))
}
Promise.all([
  sleep(2000).then(()=>{
    console.log(1);
    return 2;
  }),
  sleep(3000).then(()=>{
    console.log(3);
    return 4;
  }),
]).then((v)=>console.log(v))
// 1 2 [3,4]

Promise.race


function sleep(t){
  return new Promise((resolve)=>setTimeout(resolve,t))
}
Promise.race([
  sleep(2000).then(()=>{
    console.log(1);
    return 2;
  }),
  sleep(3000).then(()=>{
    console.log(3);
    return 4;
  }),
]).then((v)=>console.log(v))
// 1 2 3

配合 async/await

// 休眠
function sleep(t){
  return new Promise((resolve)=>setTimeout(resolve,t))
}

// 获取包数据
async function queryData(name){
  let result = await fetch(`https://unpkg.com/${name}/package.json`)
  return await result.json()
}

async function print(obj,key){
      console.log(key,obj);
}

// 展示一个对象
async function printAll(obj,key=''){
  if(obj?.constructor===Array || typeof obj === "object"){
    key&&console.group(key)
    for(let skey in obj){
       await printAll(obj[skey],obj?.constructor===Array?'':translate(skey))
    }
    key&&console.groupEnd(key)
  }else{
      print(obj,translate(key));
  }
}

function translate(str){
  return {
    name:'名称',
version:'版本',
main:'主文件',
unpkg:'cdn unpkg 默认文件',
jsdelivr:'cdn jsdelivr 默认文件',
typings:'ts 类型',
files:'npm 包文件列表',
    dependencies:'依赖',
    description:'描述',
    devDependencies:'开发依赖',
    scripts:'脚本' ,
module:'ES6 Module 主文件',
repository:'源码地址',
license:'许可证',
engines:'编译器',
author:'作者',
  }[str]||str
}

async function show(name){
  const package = await queryData(name);
  await printAll(package,name);
}

(async function(list){
    for(let i in list){
       await show(list[i]);
    }
})(["vue","react",'@qadd/css'])

相关文章

网友评论

      本文标题:Promise

      本文链接:https://www.haomeiwen.com/subject/oevpxrtx.html