提交 eb8d79fa 编写于 作者: Huan (李卓桓)'s avatar Huan (李卓桓)

do not reject a promise twice #122

上级 8423c0b2
......@@ -251,10 +251,15 @@ export class BrowserDriver {
*/
const TIMEOUT = 7 * 1000
const timer = setTimeout(() => {
let timer: NodeJS.Timer | null
timer = setTimeout(() => {
const e = new Error('valid() driver.getSession() timeout(halt?)')
log.warn('PuppetWebBrowserDriver' , e.message)
// record timeout by set timer to null
timer = null
// 1. Promise rejected
return reject(e)
......@@ -264,7 +269,10 @@ export class BrowserDriver {
driver.getSession()
.then(session => {
log.verbose('PuppetWebBrowserDriver', 'valid() getSession() done')
clearTimeout(timer)
if (timer) {
clearTimeout(timer)
timer = null
}
// 2. Promise resolved
return resolve(session)
......@@ -274,7 +282,11 @@ export class BrowserDriver {
log.warn('PuppetWebBrowserDriver', 'valid() getSession() rejected: %s', e && e.message || e)
// 3. Promise rejected
return reject(e)
if (timer) {
// do not call reject again if there's already a timeout
timer = null
return reject(e)
}
})
......
......@@ -72,8 +72,8 @@ async function onBrowserDead(this: PuppetWeb, e: Error): Promise<void> {
const TIMEOUT = 180000 // 180s / 3m
// this.watchDog(`onBrowserDead() set a timeout of ${Math.floor(TIMEOUT / 1000)} seconds to prevent unknown state change`, {timeout: TIMEOUT})
this.emit('watchdog', {
data: `onBrowserDead() set a timeout of ${Math.floor(TIMEOUT / 1000)} seconds to prevent unknown state change`
, timeout: TIMEOUT
data: `onBrowserDead() set a timeout of ${Math.floor(TIMEOUT / 1000)} seconds to prevent unknown state change`,
timeout: TIMEOUT,
})
this.scan = null
......@@ -109,13 +109,13 @@ async function onBrowserDead(this: PuppetWeb, e: Error): Promise<void> {
}
log.verbose('PuppetWebEvent', 'onBrowserDead() ding() works well after reset')
} catch (e) {
log.error('PuppetWebEvent', 'onBrowserDead() exception: %s', e.message)
} catch (err) {
log.error('PuppetWebEvent', 'onBrowserDead() exception: %s', err.message)
try {
await this.quit()
await this.init()
} catch (err) {
log.warn('PuppetWebEvent', 'onBrowserDead() fail safe for this.quit(): %s', err.message)
} catch (error) {
log.warn('PuppetWebEvent', 'onBrowserDead() fail safe for this.quit(): %s', error.message)
}
}
......
......@@ -8,15 +8,13 @@
import { test } from 'ava'
import {
Event
, PuppetWeb
Event,
PuppetWeb,
} from '../../src/puppet-web/'
// const PORT = process.env.WECHATY_PORT || 58788
const PROFILE = 'unit-test-session.wechaty.json'
// const PuppetWeb = require('../../src/puppet-web')
test('Puppet Web Event smoking test', async t => {
let pw = new PuppetWeb({profile: PROFILE})
t.truthy(pw, 'should instantiated a PuppetWeb')
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册