@@ -392,10 +392,6 @@ class TuyaDevice extends EventEmitter {
392392 delete payload . data . t ;
393393 }
394394
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-
399395 debug ( 'SET Payload:' ) ;
400396 debug ( payload ) ;
401397
@@ -409,10 +405,14 @@ class TuyaDevice extends EventEmitter {
409405 sequenceN
410406 } ) ;
411407
408+ // Make sure we only resolve or reject once
409+ let resolvedOrRejected = false ;
410+
412411 // Queue this request and limit concurrent set requests to one
413412 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+ }
416416
417417 // Send request and wait for response
418418 try {
@@ -423,12 +423,14 @@ class TuyaDevice extends EventEmitter {
423423 // Send request
424424 this . _send ( buffer ) . catch ( error => {
425425 if ( options . shouldWaitForResponse && ! resolvedOrRejected ) {
426+ resolvedOrRejected = true ;
426427 reject ( error ) ;
427428 }
428429 } ) ;
429430 if ( options . shouldWaitForResponse ) {
430431 this . _setResolver = data => {
431432 if ( ! resolvedOrRejected ) {
433+ resolvedOrRejected = true ;
432434 resolve ( data ) ;
433435 }
434436 } ;
@@ -453,6 +455,10 @@ class TuyaDevice extends EventEmitter {
453455 'error' ,
454456 'Timeout waiting for status response from device id: ' + this . device . id
455457 ) ;
458+ if ( ! resolvedOrRejected ) {
459+ resolvedOrRejected = true ;
460+ throw new Error ( 'Timeout waiting for status response from device id: ' + this . device . id ) ;
461+ }
456462 } ) ) ;
457463 }
458464
@@ -462,7 +468,7 @@ class TuyaDevice extends EventEmitter {
462468 * wraps the entire operation in a retry.
463469 * @private
464470 * @param {Buffer } buffer buffer of data
465- * @returns {Promise<Any > } returned data for request
471+ * @returns {Promise<any > } returned data for request
466472 */
467473 _send ( buffer ) {
468474 const sequenceNo = this . _currentSequenceN ;
@@ -564,13 +570,19 @@ class TuyaDevice extends EventEmitter {
564570 // Automatically ask for dp_refresh so we
565571 // can emit a `dp_refresh` event as soon as possible
566572 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+ } ) ;
568577 }
569578
570579 // Automatically ask for current state so we
571580 // can emit a `data` event as soon as possible
572581 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+ } ) ;
574586 }
575587
576588 // Resolve
0 commit comments