event-promise 讓事件回調,更容易使用Promise

EventPromise

安裝

npm install e-promise
# or
yarn add e-promise
複製代碼

它能夠作什麼?

在 Node 中,咱們常常須要鏈接數據庫、Redis、Mq、Socket、Rpc等等,它們都是基於回調通知是否鏈接成功,在鏈接成功的時候才能進行對應的操做,EventPromise 就是專門爲了解決它而存在,讓你使用同步的形式調用異步的回調。javascript

例子

// 這裏用 socket.io 舉個例子,其它的觸類旁通
const EventPromise = require('e-promise');
class IoEventPromise extends EventPromise {
	constructor() {
		super({
			// 設置超時時間,若是超過爲異常
			timeout: 1000,
			// 設置 awaitPromise 最大的調用次數,若是超過爲異常
			maxCall: 100
		});
		const server = require('http').createServer();
		const io = require('socket.io')(server);
		io.on('connection', client => {
			client.on('disconnect', () => {
				// 鏈接失敗
				this.emitError('disconnect');
			});
			// 鏈接成功
			this.emitSuccess(client);
		});
		server.listen(3000);
	}
	async emit (eventName, ...args) {
		const client = await this.awaitPromise();
		// 鏈接失敗,則直接輸出錯誤
		if (!client || typeof client === 'string') {
			console.log(client);
			return;
		}
		// 鏈接成功,直接發送事件
		client.emit(eventName, ...args);
	}
}

const io = new IoEventPromise();
// 這裏你就能夠當即調用,發送事件,等 socket 鏈接成功後自行發送
io.emit('事件名稱', '發送的參數');

複製代碼

options

  • options.timeout
    • 在異常的狀態下,Promise超時時間,將會直接結束Promise,返回響應結果
    • default: 1000ms
  • options.maxCall
    • eventPromise.awaitPromise(); 在異常的狀態下,超過最大的調用次數,將會直接結束Promise,返回響應結果
    • defalut: 100

API

  • eventPromise.emit(status: boolean, value: any = null);java

    • status = true 的狀況下,任什麼時候候都會直接響應 Promise
    • status = false 的狀況下,將會等待 options.timeout 或 options.maxCall 觸發的時候結束 Promise
    • value Promise 的返回值
  • eventPromise.emitSuccess(value?: any);git

    • 會當即響應 Promise 結果
  • eventPromise.emitError(value?: any);github

    • 若是在 options.timeout 和 options.maxCall 指定的限制內,沒有執行 eventPromise.emitSuccess() ,將會響應本結果
  • eventPromise.awaitPromise();數據庫

    • 等待 Promise 響應,而且能夠拿到返回值

GitHub 傳送門npm

相關文章
相關標籤/搜索