promise和高阶函数
作者:互联网
promise
<script type="text/javascript">
//服务器的组成
//协议 域名 端口
//https/http baidu.com/qq.com 8080/
// 同源策略:协议,域名,端口三者必须一致
//解决跨域的方式“常见”的三种:
//1).在后端的服务器上加上Access=control-Allow-orgin:*
//*所有的域名都可以访问当前服务器,简称cors
//2).使用jsonp,非官方跨域解决方案,算不上严格的ajax
//始终利用一些带有src的标签(script,iframe),不受限制的访问外部资源
//结合callback拿到数据
//3).服务器代理server proxy
//node服务器代理
//nginx的反向代理
//面试题2
//json和jsonp的区别:
//json:轻量级数据格式,用于网络传输,配置文件
//jsonp:非官方跨域解决方案,算不上严格的ajax
//始终利用一些带有src的标签(script,iframe),不受限制的访问外部资源
//结合callback拿到数据
//线程?进程?
//进程:是资源分配的最小单位,是程序执行的最小单位,程序的生命周期,双击程序,创建一个主线程,关闭结束主线程,是一个人
//线程:用来干活的,是手脚
//js引擎是单线程,容易造成堵塞,需要用回调函数解决异步问题
//回调函数有缺点,滥用回调函数造成回调地狱
//回调地狱不方便代码的维护和理解
//在es6推出promise
//完成了承诺
//未完成承诺
// 1.什么是promise
//是构造函数,需要被实例,是一个异步的微任务
//有三个状态,等待(pending),完成(fulfilled),拒绝(rejected)
//状态不可逆 等到-->完成或等待--->拒绝
//执行了resolve就不会执行reject,执行力reject就不会执行resolve
//原型方法 then catch finally
//静态方法 all,race,resole,reject
//(静态方法不需要实例)
// var p=new Promise(function(resolve,reject){
// reject('ok');
// });
// p.then(function(res){
// console.log(res)
// }).catch (function(res){
// console.log(res)
// }).finally(function(){
// console.log('我始终被执行')
// })
function run1(){
return new Promise(function(resolve,reject){
setTimeout(()=>{
var data='run1'
resolve(data)
},2000)
})
}
function run2(){
return new Promise(function(resolve,reject){
setTimeout(()=>{
var data='run2'
resolve(data)
},5000)
})
}
// var res1=run1()
// var res2=run2()
// res1.then(function(res){
// console.log(res)
// })
// res2.then(function(res){
// console.log(res)
// })
//并发执行,并且结果做成是一个数组
Promise.all([run1(),run2()]).then(function(res){
console.log(res)
})
//龟兔赛跑,兔子飞快
Promise.race([run1(),run2()]).then(function(res){
console.log(res)
})
//同步,代码是同步的,又希望getDataA返回的是一个promise对象
function getDataA(){
return Promise.resolve('ok1')
}
//同步
function getDataB(){
return Promise.resolve('ok2')
}
getDataA().then(function(res){
console.log(res)
})
getDataB().then(function(res){
console.log(res)
})
</script>
高阶函数
<script>
//原型: 每个函数自带的一个属性,属性名称叫做 prototype,
// 它的值是一个对象,让构造函数的属性和方法,进行共享
//减少内存的开销
// toString() 每个构造函数都有toString()方法
// Date.prototype.toString=function(){
// console.log("帅哥在台上");
// }
// var date = new Date();
// console.log(date);
// Array.prototype.toString=function(){
// console.log("222");
// }
// var arr=[11,22,33];
// console.log(arr.toString());
// console.log( Array.prototype);
// var arr1=[11,22,33];
// var arr2=[11,22,33];
// forEach,map,some,every,filter,reduce,sort
// console.log( Array.prototype.sort);
//1).forEach
Array.prototype.myforEach = function (callback) {
//this, 谁调用myforEach,this就是谁!
console.log(this);
for (var i = 0; i < this.length; i++) {
callback(this[i], i, this);
}
}
var arr1 = [1, 6, 3, 7, 9];
arr1.myforEach(function (item, index, arr) {
console.log(item, index, arr);
})
//2).map
Array.prototype.myMap = function (callback) {
var list = [];
for (var i = 0; i < this.length; i++) {
list.push(callback(this[i], i, this))
}
return list
}
var arr1 = [1, 6, 3, 7, 9];
var res = arr1.myMap(function (item, index, arr) {
return item * 10
})
console.log(res);
//3).你自己写一个mysort方法
Array.prototype.mySort = function (callback) {
for (var i = 0; i < this.length - 1; i++) {
for (var j = 0; j < this.length - 1 - i; j++) {
if (callback(this[j], this[j + 1]) >= 1) {
var temp = this[j + 1];
this[j + 1] = this[j];
this[j] = temp;
}
}
}
return this;
}
var arr1 = [1, 6, 3, 7, 9];
var res = arr1.mySort(function (a, b) {
return a - b;
})
console.log(res);
//4).filter
Array.prototype.myfilter = function (callback) {
var list = [];
for (var i = 0; i < this.length; i++) {
if (callback(this[i], i, this)) {
list.push(this[i])
}
}
return list;
}
var arr1 = [1, 6, 3, 7, 9];
var res = arr1.myfilter(function (item, index, arr) {
return item > 5
})
console.log(res);
//5).some
Array.prototype.mySome = function (callback) {
for (var i = 0; i < this.length; i++) {
if (callback(this[i], i, this)) {
return true;
}
}
return false;
}
var arr1 = [1, 6, 3, 7, 9];
console.log(arr1.mySome((item, index, aaa) => {
return item > 2
}));
//6).every
Array.prototype.myevery = function (callback) {
var flag = true;
for (var i = 0; i < this.length; i++) {
if (!callback(this[i], i, this)) {
flag = false;
break;
}
}
return flag
}
var arr1 = [1, 6, 3, 7, 9];
console.log(arr1.myevery((item, index, aaa) => {
return item > 2
}));
//reduce
// Array.prototype.Myreduce = function(callback,f){
// var str
// if(f||''==f){
// str = f
// var i = 0
// }
// else{
// str = this[0]
// var i = 1
// }
// for(;i<this.length;i++){
// str = callback(str,this[i])
// }
// return str
// }
// console.log(arr1.Myreduce(function(pre,cur){
// return pre+cur
// },''));
//1
//var arr1 = [1, 6, 3, 7, 9];
Array.prototype.myreduce = function (callback, init) {
//如果一个参数,pre就是第一个数,下标从1开始
if (arguments.length == 1) {
var pre = this[0];
for (var i = 1; i < this.length; i++) {
var cur = this[i];
//把回调函数的返回值丢给下一次的pre
pre = callback(pre, cur, i, this);
}
return pre;
}
//如果2个参数,pre就是第初始值,下标从0开始
if (arguments.length == 2) {
var pre = init;
for (var i = 0; i < this.length; i++) {
var cur = this[i];
//把回调函数的返回值丢给下一次的pre
pre = callback(pre, cur, i, this);
}
return pre;
}
// var pre = arguments.length == 2 ? init : this[0];
// var i = arguments.length == 2 ? 0 : 1;
// for (; i < this.length; i++) {
// var cur = this[i];
// pre = callback(pre, cur, i, this);
// }
// return pre;
}
console.log("-----------------");
// var arr1 = [1, 6, 3, 7, 9];
// console.log(arr1);
// //1个参数 5个数 4次
arr1.myreduce(function (pre, cur, index, arr) {
// 1 6
// undefined 3
console.log(pre, cur, index);
})
console.log("-----------------");
// //2个参数 5个数 5次
arr1.myreduce(function (pre, cur, index, arr) {
console.log(pre, cur, index);
}, "你好")
标签:function,pre,console,函数,res,promise,var,高阶,log 来源: https://www.cnblogs.com/kakaya/p/16410838.html