代码拉取完成,页面将自动刷新
同步任务在主线程执行,形成一个执行栈
在主线程之外,还存在一个任务队列,通过回调函数的形式将所要执行的函数放到任务队列中,不占用主线程
等主线程执行完毕后,系统会读取"任务队列",从而将任务从任务队列进入到主线程中执行。
主线程循环执行第三步
这个过程是不断循环的,所以整个运行机制被称为event loop
栈、堆、消息队列是一种数据结构,队列,特点为先进先出,存放执行的任务
宏任务:消息队列中的每个任务都是宏任务,每次宏任务执行完毕之后查看相应的微任务队列是否为空,如果不为空,则会按照先进先出的规则全部执行完对应的微任务,如此循环,直至任务结束。
微任务:每个宏任务对应都有一个微任务队列,微任务主要解决任务优先级的问题和单个任务执行过长的问题a
setTimeout(function(){
var a = "hellow";
setTimeout(function(){
var b = "lagou";
setTimeout(function(){
var c = "I ❤ U";
// console.log(a + b +c);
})
})
});
function timeOut (text){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(text);
},10);
})
}
timeOut("hellow").then(res => {
return timeOut(res + "lagou");
}).then(res=>{
return timeOut(res + "I ❤ U");
}).then(res => {
console.log(res);
});
const fp = require("lodash/fp");
/**
* 数据
* horspower 马力
* dollar_value 价格
* in_stock 库存
*/
const cars = [
{ name: 'Ferrari FF', horsepower: 660, dollar_value: 700000, in_stock: true },
{ name: 'Spyker C12 Zagato', horsepower: 650, dollar_value: 648000, in_stock: false },
{ name: 'Jaguar XKR‐S', horsepower: 550, dollar_value: 132000, in_stock: false },
{ name: 'Audi R8', horsepower: 525, dollar_value: 114200, in_stock: false },
{ name: 'Aston Martin One‐ 77', horsepower: 750, dollar_value: 1850000, in_stock: true },
{ name: 'Pagani Huayra', horsepower: 700, dollar_value: 1300000, in_stock: false }
]
let isLastInStock = function (cars) {
//获取最后一条数据
let last_car = fp.last(cars);
//获取最后一条数据的 in_stock 属性值
return fp.prop('in_stock', last_car);
}
console.log(isLastInStock(cars));
let newLast = fp.flowRight(fp.prop("in_stock"),fp.last);
console.log(newLast(cars));
let getFirstCarName = fp.flowRight(fp.prop("name"),fp.first);
console.log(getFirstCarName(cars));
let _average = function (xs) {
return fp.reduce(fp.add, 0, xs) / xs.length;
} // <‐ 无须改动
let averageDollarValue = function(array){
let saveItem = function (arr){
let count = fp.map(function (car) {
return car.dollar_value
}, arr);
return count;
}
return fp.flowRight(_average,saveItem)(array);
};
let getAverage = averageDollarValue(cars);
console.log(getAverage);
let _underscore = fp.replace(/\W+/g,"_");//无需改动并在函数中使用她
function sanitizeNames(array){
return fp.flowRight(fp.map(_underscore),fp.map(fp.toLower))(array);
}
console.log(sanitizeNames(['Hello World',"DLFJADLFJDLSFSFJ","DFSFDSFDF"]));
const { Maybe, Container } = require("./support.js");
let maybe = Maybe.of([5, 6, 1]);
let ex1 = (num) => {
//你需要实现的函数...
let fn = fp.flowRight(fp.map(fp.add(num)));
return maybe.map(fn);
}
console.log(ex1(1));
let xs = Container.of([
"do",
"ray",
"me",
"fa",
"so",
"la",
"ti",
"do"
])
let ex2 = () => {
return xs.map(fp.first)._value
}
console.log(ex2());
let safeProp = fp.curry(function (x, o) {
return Maybe.of(o[x])
})
let user = { id: 2, name: 'Albert' }
let ex3 = () => {
//你需要实现的函数...
return safeProp("name")(user).map(fp.first)._value;
}
console.log(ex3());
let ex4 = function (n){
if(n){
return parseInt(n);
}
}
let myEx4 = function(n){
return Maybe.of(n).map(parseInt)._value;
}
console.log(myEx4(4645.12313));
const PENDING = "pending"; //等待
const PULFILLED = "pulfilled"; //成功
const REJECTED = "rejected";//失败
class myPromise{
constructor(executr){
try{
executr(this.resolve,this.reject);
}
catch(err){
this.reject(err);
}
}
//成功之后的值
value = undefined;
//失败之后的原因
reason = undefined;
// Promise状态
status = PENDING;
//成功回调
successCallback = [];
//失败回调
failCallback = [];
//修改成功状态
resolve = value =>{
//如果状态不是等待直接退出函数
if(this.status !== PENDING) return;
this.status = PULFILLED;
//设置成功后的值
this.value = value;
//this.successCallback && this.successCallback(value);
while(this.successCallback.length){
this.successCallback.shift()();
}
}
//修改状态失败
reject = value => {
//如果状态不是等待直接退出函数
if(this.status !== PENDING) return;
this.status = REJECTED;
//设置失败后的原因
this.reason = value;
//this.failCallback && this.failCallback(value);
while(this.failCallback.length){
this.failCallback.shift()();
}
}
finally(callback){
return this.then(value=>{
return myPromise.resolve(callback()).then(()=> value)
},err=>{
return myPromise.resolve(callback()).then(()=> {throw err})
})
}
then = (successCallback,failCallback)=>{
successCallback = successCallback ? successCallback : value=>value;
failCallback = failCallback ? failCallback : err=> {throw err};
let promise2 = new myPromise((reslove,reject)=>{
if(this.status == PULFILLED){
//异步 为了能够获取到 promise2
setTimeout(()=>{
try{
let x = successCallback(this.value);
//判断x是普通值还是promise对象
//如果是普通值直接调用resolve
//如果是promise对象,查看promise对象返回的结果
//在根据promise对象返回的结果 决定调用resolve 还是reject
resolvePromise(promise2,x,reslove,reject);
}
catch(err){
reject(err);
}
},0);
}else if(this.status == REJECTED){
setTimeout(()=>{
try{
let x = failCallback(this.reason);
//判断x是普通值还是promise对象
//如果是普通值直接调用resolve
//如果是promise对象,查看promise对象返回的结果
//在根据promise对象返回的结果 决定调用resolve 还是reject
resolvePromise(promise2,x,reslove,reject);
}
catch(err){
reject(err);
}
},0);
}else{
//等待
//将成功回调和失败回调存储起来
this.successCallback.push(()=>{
setTimeout(()=>{
try{
let x = successCallback(this.value);
//判断x是普通值还是promise对象
//如果是普通值直接调用resolve
//如果是promise对象,查看promise对象返回的结果
//在根据promise对象返回的结果 决定调用resolve 还是reject
resolvePromise(promise2,x,reslove,reject);
}
catch(err){
reject(err);
}
},0)
});
this.failCallback.push(()=>{
setTimeout(()=>{
try{
let x = failCallback(this.reason);
//判断x是普通值还是promise对象
//如果是普通值直接调用resolve
//如果是promise对象,查看promise对象返回的结果
//在根据promise对象返回的结果 决定调用resolve 还是reject
resolvePromise(promise2,x,reslove,reject);
}
catch(err){
reject(err);
}
},0)
});
}
});
return promise2;
}
catch(failCallback){
return this.then(undefined,failCallback)
}
//注意需要在所有promise异步执行之后调用reslove
static all (array){
//结果数组
let result = [];
let index = 0;
return new myPromise((reslove,reject)=>{
function addData (i,value){
result[i] = value;
index++;
if(index === array.length){
reslove(result);
}
}
for(let i=0;i<array.length;i++){
let current = array[i];
if(current instanceof myPromise){
//promise对象
current.then(value=>{
addData(i,value)
},err=>{
reject(err)
});
}else{
//普通值
addData(i,current);
}
}
})
}
static resolve(data){
if(data instanceof myPromise){
return data;
}else{
return new myPromise((resolve,reject)=>{
resolve(data);
})
}
}
}
function resolvePromise (promise2,x,reslove,reject){
//判断返回
if(promise2 === x){
return reject(new TypeError("promise对象被循环调用"))
}
//判断是否是promise对象
if(x instanceof myPromise) {
// x.then(value=> resolve(value),err=>reject(err));
//简写
x.then(reslove,reject);
}else{
reslove(x);
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。