美文网首页
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