美文网首页
promise-api

promise-api

作者: web_jianshu | 来源:发表于2020-05-21 10:38 被阅读0次
    var fs = require('fs')
    
    var p1 = new Promise(function (resolve, reject) {
    
        fs.readFile('./data/a1.txt', 'utf8', function (err, data) {
            if (err) {
                reject(err)
            } else {
                // console.log(data);
                resolve(data)
            }
        })
    })
    
    var p2 = new Promise(function (resolve, reject) {
    
        fs.readFile('./data/b.txt', 'utf8', function (err, data) {
            if (err) {
                reject(err)
            } else {
                // console.log(data);
                resolve(data)
            }
        })
    })
    
    var p3 = new Promise(function (resolve, reject) {
    
        fs.readFile('./data/c.txt', 'utf8', function (err, data) {
            if (err) {
                reject(err)
            } else {
                // console.log(data);
                resolve(data)
            }
        })
    })
    
    // 写法1: 在.then的第二个参数指定错误回调 后续代码会继续执行 项目中不想后续代码继续执行 
    // 一般在最后使用.catch(err => {  throw err }) 捕获错误 一旦捕获 后续代码不再执行
    
    p1
        .then(function (data) {
            console.log(data);
            // 当 p1 读取成功的时候
            //  return {}
            // 当函数中 return 的结果就可以在后面的 then 中 funcion 接收到
            // 当你 return 123 后面就接收到 123
            //      return 'hello' 后面就接收到 'hello'
            //      没有 return 后面接收到的就是 undefined
            // 上面那些 return 的数据没什么卵用
            // 真正有用的是 :我们可以 return 一个 Promise 对象
            // 当 return 一个 Promise 对象的时候,后续的 then 方法中的第一个参数函数会作为 p2 的 resolve
            return p2
    
        }, function (err) {
            console.log('读取文件失败', err);
            return p2
        })
        .then(function (data) {
            console.log(data);
            return p3
        })
        .then(function (data) {
            console.log(data);
            console.log('end');
        })
    
    
    // Promise扩展
    new Promise(resolve => {
        resolve();
    }).then(res => {
        console.log(res); // => undefined
    });
    
    new Promise(resolve => {
        resolve('hello world');
    }).then(res => {
        console.log(res); // => hello world
    });
    
    new Promise(resolve => {
        resolve({ code: 0, data: { name: 'jerry', age: 19 }, status: 200, msg: 'success' });
    }).then(res => {
        console.log(res); // => {code: 0, data: {name: "jerry", age: 19}, status: 200, msg: "success"}
    });
    
    
    // 当resolve参数为Promsie对象时 后面.then(() => {}) 指定的第一个成功回调函数为resolve参数(Promise)的resolve
    var promsie = new Promise(resolve => {
        console.log('begin');
        resolve('then')
    })
    new Promise(resolve => {
        resolve(promsie);
    }).then(res => {
        console.log(res); // => then
    });
    // => begin then
    
    new Promise(resolve => {
        console.log(1);
        resolve();
    })
        .then((res) => {
            console.log(2, res);
        })
        .then((res) => {
            console.log(3, res);
            return { code: 0, data: { name: 'Jerry', age: 20 }, status: 200, msg: 'success' }
        })
        .then((res) => {
            console.log(4, res);
        });
    
    // => 
    // 1
    // 2 undefined
    // 3 undefined
    // 4 {code: 0, data: {name: "Jerry", age: 20}, status: 200, msg: "success"}
    
    
    let thenable = {
        then: function (resolve, reject) {
            resolve('hello world');
        }
    };
    let p1 = Promise.resolve(thenable);
    p1.then(function (value) {
        console.log(value); // => hello world
    });
    
    let thenable = {
        then123: function (resolve, reject) {
            resolve(42);
        }
    };
    let p1 = Promise.resolve(thenable);
    var promise = p1.then(function (value) {
        console.log(value); // => {then123: function(resolve, reject){}}
    });
    console.log(promise); // => Promise{__proto__: Promise, [[PromiseStatus]]: "resolved", [[PromiseValue]]: undefined}
    
    const p = Promise.resolve("Hello");
    p.then(function (s) {
        console.log(s); // => Hello
    });
    
    // Promise.resolve(参数) 参数为Promsie对象时 后续.then((res) => {}) 指定的第一个成功回调函数为resolve
    var promise = new Promise(resolve => {
        console.log('begin');
        resolve('then')
    })
    Promise.resolve(promise).then(res => {
        console.log(res); // then
    })
    // =>
    // begin
    // then
    

    相关文章

      网友评论

          本文标题:promise-api

          本文链接:https://www.haomeiwen.com/subject/ltfzohtx.html