Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 46 additions & 6 deletions lib/db.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,53 @@
const Tapable = require('tapable')
const { AsyncSeriesWaterfallHook, AsyncSeriesBailHook } = require("tapable");

class DB extends Tapable {
constructor() {
class DB {
// options;
constructor(options) {
// TODO
// super();
this.options = options;

this.hook = new AsyncSeriesWaterfallHook(["res"]);
/**
* 保存每一步回调操作的正常结果
*/
this.values = [];
}

request() {
// TODO
request(options) {
return new Promise((resolve, reject) => {
const finalOps = {};
Object.assign(finalOps, options, this.options);

this.hook.callAsync(finalOps, (err, res) => {
// judge一般都会是最后一个回调
const prevRes = this.values.slice(0, this.values.length - 1).pop();

// err || err === undefined 验证reject空和非空
// res === true 验证中断
if (err || err === undefined || res === true) reject(prevRes);
else {
resolve(res);
}
});
});
}

plugin(name, callback) {
this.hook.tapPromise(name, async (...args) => {
// 为了保存中间结果,返回new Promise
// 为了把同步回调都转成异步使用await
const res = await callback(...args);

// console.log("callback", res);
//回调中返回的undefined不保存
if (res !== undefined) this.values.push(res);

return new Promise((resolve, reject) => {
resolve(res);
});
});
}
}

module.exports = DB
module.exports = DB;
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"webpack": "^3.5.3"
},
"dependencies": {
"puppeteer": "^16.2.0"
"puppeteer": "^16.2.0",
"tapable": "^2.2.1"
}
}