十三、Promise与异步编程


一、Promise与异步编程

Promises 是异步编程的另一种选择,它的工作方式类似于在其他语言中延迟并在将来执行作
业。
异步编程的背景
JS 引擎在同一时刻只能执行一段代码,所以引擎无须留意那些“可能”运行的代码。代码会被放置在**作业队列( job queue )**中,每当一段代码准备被执行,它就会被添加到作业队列。当 JS 引擎结束当前代码的执行后,事件循环就会执行队列中的下一个作业。事件循环(event loop )是 JS 引擎的一个内部处理线程,能监视代码的执行并管理作业队列。要记住既然是一个队列,作业就会从队列中的第一个开始,依次运行到最后一个。
事件模型
当用户点击一个按钮或按下键盘上的一个键时,一个事件( event )——例如 onclick ——就被触发了。该事件可能会对此交互进行响应,从而将一个新的作业添加到作业队列的尾部。这就是 JS 关于异步编程的最基本形式。事件处理程序代码直到事件发生后才会被执行,此时它会拥有合适的上下文。

let button = document.getElementById('my-btn')
button.onclick = function(event){
   
    console.log('clicked')
}

在此代码中, console.log(“Clicked”) 直到 button 被点击后才会被执行。当 button 被点击,赋值给 onclick 的函数就被添加到作业队列的尾部,并在队列前部所有任务结束之后再执行。
回调模式
当 Node.js 被创建时,它通过普及回调函数编程模式提升了异步编程模型。回调函数模式类似于事件模型,因为异步代码也会在后面的一个时间点才执行。不同之处在于需要调用的函数(即回调函数)是作为参数传入的

readFile('hello.txt', function(err, contents){
   
    if(err){
   
        throw err
    }
    console.log(contents)
})
console.log('hi')

此例使用了 Node.js 惯例,即错误优先( error-first )的回调函数风格。 readFile() 函数用于读取磁盘中的文件(由第一个参数指定),并在读取完毕后执行回调函数(即第二个参数)。如果存在错误,回调函数的 err 参数会是一个错误对象;否则 contents 参数就会以字符串形式包含文件内容。
使用回调函数模式, readFile() 会立即开始执行,并在开始读取磁盘时暂停。这意味着

co

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永恒的宁静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值