@@ -392,10 +392,6 @@ class TuyaDevice extends EventEmitter {
392
392
delete payload . data . t ;
393
393
}
394
394
395
- if ( options . shouldWaitForResponse && this . _setResolver ) {
396
- throw new Error ( 'A set command is already in progress. Can not issue a second one that also should return a response.' ) ;
397
- }
398
-
399
395
debug ( 'SET Payload:' ) ;
400
396
debug ( payload ) ;
401
397
@@ -409,10 +405,14 @@ class TuyaDevice extends EventEmitter {
409
405
sequenceN
410
406
} ) ;
411
407
408
+ // Make sure we only resolve or reject once
409
+ let resolvedOrRejected = false ;
410
+
412
411
// Queue this request and limit concurrent set requests to one
413
412
return this . _setQueue . add ( ( ) => pTimeout ( new Promise ( ( resolve , reject ) => {
414
- // Make sure we only resolve or reject once
415
- let resolvedOrRejected = false ;
413
+ if ( options . shouldWaitForResponse && this . _setResolver ) {
414
+ throw new Error ( 'A set command is already in progress. Can not issue a second one that also should return a response.' ) ;
415
+ }
416
416
417
417
// Send request and wait for response
418
418
try {
@@ -423,12 +423,14 @@ class TuyaDevice extends EventEmitter {
423
423
// Send request
424
424
this . _send ( buffer ) . catch ( error => {
425
425
if ( options . shouldWaitForResponse && ! resolvedOrRejected ) {
426
+ resolvedOrRejected = true ;
426
427
reject ( error ) ;
427
428
}
428
429
} ) ;
429
430
if ( options . shouldWaitForResponse ) {
430
431
this . _setResolver = data => {
431
432
if ( ! resolvedOrRejected ) {
433
+ resolvedOrRejected = true ;
432
434
resolve ( data ) ;
433
435
}
434
436
} ;
@@ -453,6 +455,10 @@ class TuyaDevice extends EventEmitter {
453
455
'error' ,
454
456
'Timeout waiting for status response from device id: ' + this . device . id
455
457
) ;
458
+ if ( ! resolvedOrRejected ) {
459
+ resolvedOrRejected = true ;
460
+ throw new Error ( 'Timeout waiting for status response from device id: ' + this . device . id ) ;
461
+ }
456
462
} ) ) ;
457
463
}
458
464
@@ -462,7 +468,7 @@ class TuyaDevice extends EventEmitter {
462
468
* wraps the entire operation in a retry.
463
469
* @private
464
470
* @param {Buffer } buffer buffer of data
465
- * @returns {Promise<Any > } returned data for request
471
+ * @returns {Promise<any > } returned data for request
466
472
*/
467
473
_send ( buffer ) {
468
474
const sequenceNo = this . _currentSequenceN ;
@@ -564,13 +570,19 @@ class TuyaDevice extends EventEmitter {
564
570
// Automatically ask for dp_refresh so we
565
571
// can emit a `dp_refresh` event as soon as possible
566
572
if ( this . globalOptions . issueRefreshOnConnect ) {
567
- this . refresh ( ) ;
573
+ this . refresh ( ) . catch ( error => {
574
+ debug ( 'Error refreshing on connect: ' + error ) ;
575
+ this . emit ( 'error' , error ) ;
576
+ } ) ;
568
577
}
569
578
570
579
// Automatically ask for current state so we
571
580
// can emit a `data` event as soon as possible
572
581
if ( this . globalOptions . issueGetOnConnect ) {
573
- this . get ( ) ;
582
+ this . get ( ) . catch ( error => {
583
+ debug ( 'Error getting on connect: ' + error ) ;
584
+ this . emit ( 'error' , error ) ;
585
+ } ) ;
574
586
}
575
587
576
588
// Resolve
0 commit comments