js中的异步模式--- promise篇(1)

写在前面:
1、本文默认读者对promise有所了解
2、本文不对promise方法做过多介绍
3、本文重点在于promise的思想以及自我实现。

回顾回调函数处理异步的弊端

1、嵌套形式回调导致代码易读性下降
2、回调函数模式处理当前未来代码关系的信任问题
实际上,对于极其简单多个异步操作的封装和组合,回调函数处理也显得十分复杂。如
问题:现在有三个文件,file1,file2,file3, 需要实现这三个文件的并行读取,然后将并行读取的文件按照读取顺序输出,仅使用回调函数模式处理,该如何组织代码?

const files = ['file1.txt', 'file2.txt', 'file3.txt']
const read = require('fs').readFile
const response = {}
function outputFile(file){
    read(file, function(err, text){
        fileReceived(file, text)
    })
}
function fileReceived(file, text){
    if(!response[file]){
        response[file] = text.toString()
    }
    for(let i = 0; i < files.length; i++){
        if(files[i] in response){
            if(response[files[i]] !== true){
                console.log(response[files[i]])
                response[files[i]] = true
            }
        }
    }
}
outputFile('file1.txt')
outputFile('file2.txt')
outputFile('file3.txt')

异步并行是常见的一种异步形式。该问题的难点在于并行请求时间不确定时,使我们不得不使用额外的变量管理顺序输出。也由此可见,回调函数形式是异步的基础,但并不是优秀的解决方案。


Promise模式

Promise 对象是 JavaScript 的异步操作解决方案,为异步操作提供统一接口。它起到代理作用(proxy),充当异步操作与回调函数之间的中介,使得异步操作具备同步操作的接口。Promise 可以让异步操作写起来,就像在写同步操作的流程,而不必一层层地嵌套回调函数.
阮一峰 《ES6标准入门》


上面一段话的重点在于:
1、Promise时一个javascript语言定义的对象,该对象充当异步操作与回调函数的中介者。
2、Promise改变了异步操作的写法,提供了一些常用的异步处理方法,方便使用者组合使用。


Promise A+规范
参考链接:https://github.com/kaola-fed/blog/issues/99

下一篇文章介绍:Promise的实现

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值