Skip to content
This repository has been archived by the owner on Feb 20, 2023. It is now read-only.

Commit

Permalink
remove promisify (#194)
Browse files Browse the repository at this point in the history
  • Loading branch information
hitbear518 authored and yorkie committed Apr 6, 2017
1 parent 8a525a8 commit 434761b
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 27 deletions.
66 changes: 40 additions & 26 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,54 +1,66 @@
"use strict";
'use strict';

import { DeviceEventEmitter, NativeModules } from 'react-native';
import promisify from 'es6-promisify';
import { EventEmitter } from 'events';

let isAppRegistered = false;
const {WeChat} = NativeModules;
const { WeChat } = NativeModules;

// Event emitter to dispatch request and response from WeChat.
const emitter = new EventEmitter();

DeviceEventEmitter.addListener('WeChat_Resp', (resp) => {
DeviceEventEmitter.addListener('WeChat_Resp', resp => {
emitter.emit(resp.type, resp);
});

// Used only with promisify. Transform callback to promise result.
function translateError(err, result) {
if (!err) {
return this.resolve(result);
}
if (typeof err === 'string') {
return this.reject(new Error(err));
}
this.reject(err);
}

function wrapRegisterApp(nativeFunc) {
if (!nativeFunc) {
return undefined;
}
const promisified = promisify(nativeFunc, translateError);
return (...args) => {
if (isAppRegistered) {
return Promise.reject(new Error('App is already registered.'));
}
isAppRegistered = true;
return promisified(...args);
return new Promise((resolve, reject) => {
nativeFunc.apply(null, [
...args,
(error, result) => {
if (!error) {
return resolve(result);
}
if (typeof error === 'string') {
return reject(new Error(error));
}
reject(error);
},
]);
});
};
}

function wrapApi(nativeFunc) {
if (!nativeFunc) {
return undefined;
}
const promisified = promisify(nativeFunc, translateError);
return (...args) => {
if (!isAppRegistered) {
return Promise.reject(new Error('registerApp required.'));
}
return promisified(...args);
return new Promise((resolve, reject) => {
nativeFunc.apply(null, [
...args,
(error, result) => {
if (!error) {
return resolve(result);
}
if (typeof error === 'string') {
return reject(new Error(error));
}
reject(error);
},
]);
});
};
}

Expand Down Expand Up @@ -88,7 +100,9 @@ export const registerApp = wrapRegisterApp(WeChat.registerApp);
* @param {String} appdesc - the app description
* @return {Promise}
*/
export const registerAppWithDescription = wrapRegisterApp(WeChat.registerAppWithDescription);
export const registerAppWithDescription = wrapRegisterApp(
WeChat.registerAppWithDescription,
);

/**
* Return if the wechat app is installed in the device.
Expand Down Expand Up @@ -137,8 +151,8 @@ const nativeSendAuthRequest = wrapApi(WeChat.sendAuthRequest);
*/
export function sendAuthRequest(scopes, state) {
return new Promise((resolve, reject) => {
WeChat.sendAuthRequest(scopes, state,() => {});
emitter.once('SendAuth.Resp', (resp) => {
WeChat.sendAuthRequest(scopes, state, () => {});
emitter.once('SendAuth.Resp', resp => {
const result = resp.errCode;
if (result === 0) {
resolve(resp);
Expand All @@ -165,7 +179,7 @@ export function sendAuthRequest(scopes, state) {
export function shareToTimeline(data) {
return new Promise((resolve, reject) => {
nativeShareToTimeline(data);
emitter.once('SendMessageToWX.Resp', (resp) => {
emitter.once('SendMessageToWX.Resp', resp => {
const result = resp.errCode;
if (result === 0) {
resolve(resp);
Expand All @@ -192,7 +206,7 @@ export function shareToTimeline(data) {
export function shareToSession(data) {
return new Promise((resolve, reject) => {
nativeShareToSession(data);
emitter.once('SendMessageToWX.Resp', (resp) => {
emitter.once('SendMessageToWX.Resp', resp => {
const result = resp.errCode;
if (result === 0) {
resolve(resp);
Expand All @@ -216,10 +230,10 @@ export function shareToSession(data) {
*/
export function pay(data) {
return new Promise((resolve, reject) => {
WeChat.pay(data, (result) => {
WeChat.pay(data, result => {
if (result) reject(result);
});
emitter.once('PayReq.Resp', (resp) => {
emitter.once('PayReq.Resp', resp => {
const result = resp.errCode;
if (result === 0) {
resolve(resp);
Expand Down
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
"ios"
],
"dependencies": {
"es6-promisify": "3.0.0",
"events": "1.0.2"
},
"peerDependencies": {
Expand Down
7 changes: 7 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1


events@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/events/-/events-1.0.2.tgz#75849dcfe93d10fb057c30055afdbd51d06a8e24"

0 comments on commit 434761b

Please sign in to comment.