2020/8/1前端学习日记

早上睡醒电话面试了有赞的前端实习生,磕磕巴巴的不知道答的是啥,唉,菜是原罪。。
继续查漏补缺
回调
回调函数是异步执行或稍后执行的函数。程序不是从顶部到底部读取代码,而是异步程序可以根据先前的功能(如http请求或者文件系统读取)发生的顺序和速度,在不同时间执行不同的功能。
简单来说就是,中间某个函数可能会在原本应该在他下面的代码执行完之后在执行。

比如下面这段node的代码

    var fs = require('fs') // 引入文件 

    var myNumber = undefined 

    // 声明一个函数

    function addOne() {

    fs.readFile('number.txt', function doneReading(err, fileContents) {

       myNumber = parseInt(fileContents);

       myNumber++;

     })

    }
    addOne(); // 调用函数
    console.log(myNumber) // 未定义 - 此行在readFile完成之前运行 logs out undefined日志输出 --这行代码在fs.readfile之前运行,this line gets run before readFile is done

在这段代码中,fs.readFile方法是异步方法。一般情况必须与硬盘或者网络进行通信的操作将会是异步的。如果只需要访问内存中的东西或者在CPU上做一些工作,他们将会是同步的。原因是I/O真的很慢。

当运行这个程序时,所有功能都被定义,但是并不是全部被立即执行。当addOne被调用时,他会启动一个readFile,然后继续下一个准备执行的事情。如果没有什么要执行,节点将等待未完成的fs/network操作完成,否则它将停止运行并退出命令行。

当读取完文件,它将运行doneReading函数,并将给他一个错误(如果有错误)和文件内容。

上面未定义的原因是我们代码中没有任何逻辑告诉consol.log语句等到readFile语句完成后才打印数字。

回调只是稍后执行的函数。了解回调的关键是你要意识到,当你不知道何时会完成一些异步操作会使用他们,但是你确实知道操作将完成的位置-异步函数的最后一行!(你虽然不知道什么时候异步函数会真正的执行,但是你可以确切的知道异步函数完成的代码)。

fs.readFile方法是由node提供,是异步的,需要很长时间才能完成。考虑他的作用:先是通过操作系统的文件系统从硬盘中找到文件将其发回给JavaScript程序。给readFile一个函数(回调函数),它将在上一步找到文件后调用它。它将检索到的数据放入JavaScript变量中,并用该变量调用函数(回调函数)。该变量称为fileContent,因为它包含文件的内容。

再看下一段代码

var fs = require('fs')
var myNumber = undefined
function addOne(callback) {
  fs.readFile('number.txt', function doneReading(err, fileContents) {
    myNumber = parseInt(fileContents)
    myNumber++
    callback()
  })
}
function logMyNumber() {
  console.log(myNumber)
}
addOne(logMyNumber)

现在,logMyNumber作为一个参数传入,该参数将成为addOne函数内部的回调变量。readFile完成后,将调用回调变量(callback())。只有函数可以被调用,所以如果你传入函数以外的任何东西,它将导致错误。

回调往往就意味着是异步,而异步就需要时间等待,也就是他将来要发生,而不是现在立刻马上,他会稍后执行,他是使用JavaScript函数的一种约定俗成的称呼,往往字面上有些抽象变得难以捉摸。通常回调仅在进行I/O时使用,例如下载种子,阅读文件,与数据库交互等,对应的例子,事件绑定,委托,bind(),addEventListener(),on(),animate(),window.onload,以及setTimeout()等等,总之凡是某个功能需要在依赖某个函数下进行执行的都是回调,他的好处就是高效执行,同时做多项工作。

promise
出现的原因:javascript是单线程工作,这意味着两段脚本不能同时运行。通常情况下javascript与绘制、更新样式、和处理用户操作处于同一队列,操作其中一项任务会延迟其他任务。

什么是promise:
1.promise是抽象异步处理对象以及对其进行各种操作的组件。
2.回调函数是处理异步过程的常用方式,传给回电函数的参数为(error对象,执行结果)组合。
3.node.js等规定在JavaScript的回调函数的第一个参数为error对象,这也是他的一个惯例。
4.而promise则是把类似的异步处理对象和处理规则进行规范化,并按照采用统一的接口来编写,而采取规定方法之外的写法都会出错。

基本概念
1.想要创建一个promise对象,可以使用new来调用promise的构造器来进行实例化。

var promise = new Promise(function(resolve, reject) {
    // 异步处理
    // 处理结束后、调用resolve 或 reject
});

2.对通过new生成的promise对象为了设置其值在resolve(成功)/reject(失败)时调用的回调函数可以使用promise.then()实例方法。

明天再更。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值