Discuss / JavaScript / 【浏览器】Promice总结

【浏览器】Promice总结

Topic source

JavaScript是单线程执行的,异步的

Promice作用:

  • then( function )串行执行任务,代码可读性强 catch( function )
  • all( array )模拟并行执行任务
  • rece( array )执行响应时间短的,其他丢弃
//串行

//承诺的事 resove()返回给then  reject() 返回给catch()
var p1 = new Promice(function(reslove,reject){
console.log("this is promice program");
reslove("one");
}); 

p1.then(function(a){
console.log();
return new promice(function(reslove,reject){
reslove("two")
});
})
.then(p2).catch(function(a){
console.log("catch the " + a);
});

var p2 = function(a){
console.log(a);
return new promice(function(reslove,reject){
if(a != 'two')
reslove("end");
else
reject("failed end")
});
};

有点晚了,明天在加
//前缀数字代表标签级别,没展开一层,级别加一

< 1 Promise {<pending>}      
   2 __proto__: Promise                            //原型对象为Promise
   2 [[PromiseStatus]]: "pending"
   2 [[PromiseValue]]: undefined


//展开
> new Promise(function () {});
< 1 Promise {<pending>}
  2 __proto__: Promise                          //下属方法属性
    3 catch: ƒ catch()
    3 constructor: ƒ Promise()
    3 finally: ƒ finally()
    3 then: ƒ then()
      3 Symbol(Symbol.toStringTag): "Promise"
    3 __proto__: Object[[PromiseStatus]]: "pending"
  2 [[PromiseValue]]: undefined


原型链  Promise -> Object -> null

异步代码最早是回调函数形式(由于JavaScript是单线程,对于一些“昂贵”的操作(高耗时),如定时,ajax,事件,往往以会回调函数形式实行异步操作提高cpu利用率)

promise专为异步代码解决复杂度 ——分离了执行代码(then)和结果处理函数(catch)

ES7引入async和await进一步解决异步代码的复杂性

//异步——回调函数(回调函数不一定异步)
function callback(){
console.log("this is callback()");
console.log(callback()-2);
}

settime(1000,callback);
console("before callback()");

//promise
new Promise(function(){
console.log("this is callback()");
}).then(function(){
console.log("callback()-2");
})

//async await
async function(){
await settime(1000);
await console.log("this is callback()");
await console.log(callback()-2);
}
console.log("before callback()");

上面的回调函数例子举的不太行

上面的是高耗时导致该操作挂起,执行下一操作

回调函数一般用于事件中 onclick(function) 或者ajax这样昂贵的操作(setTime()可以模拟这样的操作)


  • 1

Reply