JSミドルパッケージapiは処理プロセスを呼び出して、複雑な作業の山に結合します.
2430 ワード
ミドルオブジェクトを定義する
class Middleware {
constructor({ core, params }) {
// axios
this.core = core;
// axios
this.params = params;
//
this.cache = [];
}
use(fn) {
if (typeof fn !== "function") {
throw "middleware must be a function";
}
this.cache.push(fn);
return this;
}
next(data) {
if (this.middlewares && this.middlewares.length > 0) {
var ware = this.middlewares.shift();
ware.call(this, this.next.bind(this), data);
}
return data;
}
async go() {
// ,
let result = await this.core(this.params);
// ,
this.middlewares = this.cache.map(function(fn) {
return fn;
});
// ,
this.next(result);
}
}
使用//
var onion = new Middleware({core: request, params});
onion.use(function (next, data) {
console.log(1);
console.log(data);
//
next(data);
console.log("1 ");
});
onion.use(function (next, data) {
console.log(2);
console.log(data);
//
next(data);
console.log("2 ");
});
onion.use(function (next, data) {
console.log(3);
console.log(data);
console.log("3 ");
});
// next,
onion.use(function (next, data) {
console.log(4);
next(data);
console.log("4 ");
});
onion.go();
// 1
// {a: 1, b: 2}
// 2
// {a: 1, b: 2, c: 3}
// 3
// {a: 1, b: 2, c: 3, d: 4}
// 3
// 2
// 1
// {a: 1, b: 2, c: 3, d: 4}
APIインターフェースのデータが戻った後の操作関数に協力します.function handleStatus(next, res) {
console.log(res);
next(res);
}
function handleAuth(next, res) {
console.log(res);
next(res);
}
function handlePosition(next, res) {
console.log(res);
next(res);
}
function handleForbiddenList(next, res) {
console.log(res);
next(res);
}
function handleLoad(next, res) {
console.log(res);
next(res);
}
中間部品を通してこれで登録します.//
var onion = new Middleware({core: request, params});
onion.use(handleStatus);
onion.use(handleAuth);
onion.use(handlePosition);
onion.use(handleForbiddenList);
onion.use(handleLoad);
onion.go();
// ,
// let res = await onion.go();