应用Promise

1.把回调包装成Promise

  • 可读性更好
  • 返回的结果可以加入任何Promise队列

eg: 框架示例

// FileSystem.js

const fs = require('fs');

module.exports = {
    readDir: function(path, options){
        return new Promise(resolve => {
            fs.readdir(path, options, (err, files) => {
                if(err){
                    throw err;
                }
                resolve(files);
            });
        });
    },
    readFile: function(path, options){
        return new Promise(resolve => {
            fs.readFile(path, options, (err, content) => {
                if(err){
                    throw err;    
                }
                resolve(content);
            });
        });
    }
};
// 使用Promise包装以前的回调函数

// 一下代码构建了一个新的FileSystem
const fs = require('./FileSystem');

fs.readFile('../README.md', 'utf-8')
    .then(content=>{
        console.log(content);
    });

2.把任何异步操作包装成Promise

eg: 假设需求:(1)用户点击按钮,弹出确认窗体;(2)用户确认和取消有不同的处理。

// 弹出窗体
let confirm = popupManager.confirm('您确定么?');
confirm.promise
    .then(()=>{
        // do confirm staff
    })
    .catch(()=>{
        // do cancel staff
    });

// 窗体的构造函数
class Confirm{
    constructor(){
        this.promise = new Promise((resolve, reject)=>{
            this.confirmButton.onClick = resolve;
            this.cancelButton.onClick = reject;
        });
    }
}

 

你可能感兴趣的:(JS)