对于一个对象,想要了解,我们可以直接从其身上的属性和方法入手,我们可以直接在浏览器中打印出来
new Promise( function(resolve, reject) {…} / executor / );
1 2 3 4 5 6 7 8 | let p = new Promise((resolve, reject) => { setTimeout(() => { // resolve 是成功后的回调函数,通常的做法是将异步操作成功的结果作为参数传递给resolve resolve('ok') }, 1000) }) p.then(res => console.log(res)) // 输出ok |
1 2 3 4 5 | p.then(res => { // 处理 resolve }, err => { // 处理reject }) |
1 2 3 4 5 6 7 8 9 10 | const fs = require('fs') function getFileByPath(path) { return new Promise((resolve, reject) => { fs.readFile(path, 'utf-8', (err, data) => { if (err) return reject(err) resolve(data) }) }) } |
1 2 3 4 5 6 7 8 | getFileByPath('/user/admin/desktop/file/1.txt').then(res => { console.log(res) // 文件1的内容 // 继续读取文件2, 我们并不是直接在方法后面调用 then 而是使用rerturn将其返回,在外面继续调用 then 实现链式编程,并且避免了回调地狱 return getFileByPath('/user/admin/desktop/file/2.txt') }, err => console.log('读取失败了')) .then(res => { console.log(res) // 文件2的内容 }) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | getFileByPath('/user/admin/desktop/file/1.txt') .then(res => { console.log(res) // 文件1的内容 // 此处22.txt 不存在 return getFileByPath('/user/admin/desktop/file/22.txt') }) .then(res => { console.log(res) // 文件2的内容 return getFileByPath('/user/admin/desktop/file/3.txt') }) .then (res => { console.log(res) // 文件3的内容 }) .catch(err => console.log(err)) |
1 2 3 4 5 6 7 | (async () => { const [err, res] = await getFileByPath('/user/admin/desktop/file/22.txt') if (err) { return console.log('出错了') } console.log(res) })() |
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |