1

I'm trying to handle the error message from ssh2 using angular,

I was trying to do a promise to handle it but it's not working, i'm new on it, sorry if it's too bad but I have no clue how to handle it.

this is my promise

const ssh = new Promise(function(resolve, reject) {
  const conn = new ssh2Client.Client();
  conn.on('ready', function() {
    console.log('ready');
    conn.sftp(function(err, sftp) {
      sftp.readdir('/', function(error, list) {
        resolve(list);
        console.dir(list);
        conn.end();
        if (err) {
          reject(err);
        }
      });
    });
  }).connect({
  host: '192.168.4.127',
  port: 22,
  username: 'root',
  password: ''
  });
  });

  ssh.then((success)=>{
    console.log('ok',success);
  }).catch((err)=>{
    console.log('err',err);
  });

This is my error message:

zone-mix.js:3292 ERROR Error: Timed out while waiting for handshake
    at client.js:695
    at ZoneDelegate.push../node_modules/zone.js/dist/zone-mix.js.ZoneDelegate.invokeTask (zone-mix.js:421)
    at Object.onInvokeTask (core.js:3815)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone-mix.js.ZoneDelegate.invokeTask (zone-mix.js:420)
    at Zone.push../node_modules/zone.js/dist/zone-mix.js.Zone.runTask (zone-mix.js:188)
    at push../node_modules/zone.js/dist/zone-mix.js.ZoneTask.invokeTask (zone-mix.js:496)
    at ZoneTask.invoke (zone-mix.js:485)
    at timer (zone-mix.js:2074)
console.(anonymous function) @ zone-mix.js:3292
defaultErrorLogger @ core.js:1673
push../node_modules/@angular/core/fesm5/core.js.ErrorHandler.handleError @ core.js:1719
next @ core.js:4319
schedulerFn @ core.js:3555
push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.__tryOrUnsub @ Subscriber.js:195
push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.next @ Subscriber.js:133
push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._next @ Subscriber.js:77
push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next @ Subscriber.js:54
push../node_modules/rxjs/_esm5/internal/Subject.js.Subject.next @ Subject.js:47
push../node_modules/@angular/core/fesm5/core.js.EventEmitter.emit @ core.js:3539
(anonymous) @ core.js:3846
push../node_modules/zone.js/dist/zone-mix.js.ZoneDelegate.invoke @ zone-mix.js:388
push../node_modules/zone.js/dist/zone-mix.js.Zone.run @ zone-mix.js:138
push../node_modules/@angular/core/fesm5/core.js.NgZone.runOutsideAngular @ core.js:3783
onHandleError @ core.js:3846
push../node_modules/zone.js/dist/zone-mix.js.ZoneDelegate.handleError @ zone-mix.js:392
push../node_modules/zone.js/dist/zone-mix.js.Zone.runTask @ zone-mix.js:191
push../node_modules/zone.js/dist/zone-mix.js.ZoneTask.invokeTask @ zone-mix.js:496
ZoneTask.invoke @ zone-mix.js:485
timer @ zone-mix.js:2074
setTimeout (async)
scheduleTask @ zone-mix.js:2095
push../node_modules/zone.js/dist/zone-mix.js.ZoneDelegate.scheduleTask @ zone-mix.js:407
onScheduleTask @ zone-mix.js:297
push../node_modules/zone.js/dist/zone-mix.js.ZoneDelegate.scheduleTask @ zone-mix.js:401
push../node_modules/zone.js/dist/zone-mix.js.Zone.scheduleTask @ zone-mix.js:232
push../node_modules/zone.js/dist/zone-mix.js.Zone.scheduleMacroTask @ zone-mix.js:255
scheduleMacroTaskWithCurrentZone @ zone-mix.js:1114
(anonymous) @ zone-mix.js:2110
proto.(anonymous function) @ zone-mix.js:1394
startTimeout @ client.js:694
doConnect @ client.js:660
push../node_modules/ssh2/lib/client.js.Client.connect @ client.js:668
(anonymous) @ heroes.component.ts:46
ZoneAwarePromise @ zone-mix.js:891
push../src/app/components/heroes/heroes.component.ts.HeroesComponent.ngOnInit @ heroes.component.ts:32
checkAndUpdateDirectiveInline @ core.js:9250
checkAndUpdateNodeInline @ core.js:10514
checkAndUpdateNode @ core.js:10476
debugCheckAndUpdateNode @ core.js:11109
debugCheckDirectivesFn @ core.js:11069
(anonymous) @ HeroesComponent_Host.ngfactory.js? [sm]:1
debugUpdateDirectives @ core.js:11061
checkAndUpdateView @ core.js:10458
callViewAction @ core.js:10699
execEmbeddedViewsAction @ core.js:10662
checkAndUpdateView @ core.js:10459
callViewAction @ core.js:10699
execComponentViewsAction @ core.js:10641
checkAndUpdateView @ core.js:10464
callWithDebugContext @ core.js:11351
debugCheckAndUpdateView @ core.js:11029
push../node_modules/@angular/core/fesm5/core.js.ViewRef_.detectChanges @ core.js:8845
(anonymous) @ core.js:4581
push../node_modules/@angular/core/fesm5/core.js.ApplicationRef.tick @ core.js:4581
(anonymous) @ core.js:4473
push../node_modules/zone.js/dist/zone-mix.js.ZoneDelegate.invoke @ zone-mix.js:388
onInvoke @ core.js:3824
push../node_modules/zone.js/dist/zone-mix.js.ZoneDelegate.invoke @ zone-mix.js:387
push../node_modules/zone.js/dist/zone-mix.js.Zone.run @ zone-mix.js:138
push../node_modules/@angular/core/fesm5/core.js.NgZone.run @ core.js:3738
next @ core.js:4473
schedulerFn @ core.js:3555
push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.__tryOrUnsub @ Subscriber.js:195
push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.next @ Subscriber.js:133
push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._next @ Subscriber.js:77
push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next @ Subscriber.js:54
push../node_modules/rxjs/_esm5/internal/Subject.js.Subject.next @ Subject.js:47
push../node_modules/@angular/core/fesm5/core.js.EventEmitter.emit @ core.js:3539
checkStable @ core.js:3793
onHasTask @ core.js:3837
push../node_modules/zone.js/dist/zone-mix.js.ZoneDelegate.hasTask @ zone-mix.js:441
push../node_modules/zone.js/dist/zone-mix.js.ZoneDelegate._updateTaskCount @ zone-mix.js:461
push../node_modules/zone.js/dist/zone-mix.js.Zone._updateTaskCount @ zone-mix.js:285
push../node_modules/zone.js/dist/zone-mix.js.Zone.runTask @ zone-mix.js:205
drainMicroTaskQueue @ zone-mix.js:595
Promise resolved (async)
scheduleMicroTask @ zone-mix.js:578
push../node_modules/zone.js/dist/zone-mix.js.ZoneDelegate.scheduleTask @ zone-mix.js:410
push../node_modules/zone.js/dist/zone-mix.js.Zone.scheduleTask @ zone-mix.js:232
push../node_modules/zone.js/dist/zone-mix.js.Zone.scheduleMicroTask @ zone-mix.js:252
scheduleResolveOrReject @ zone-mix.js:862
ZoneAwarePromise.then @ zone-mix.js:962
push../node_modules/@angular/core/fesm5/core.js.PlatformRef.bootstrapModule @ core.js:4353
./src/main.ts @ main.ts:12
__webpack_require__ @ bootstrap:76
0 @ polyfills.ts:84
__webpack_require__ @ bootstrap:76
checkDeferredModules @ bootstrap:43
webpackJsonpCallback @ bootstrap:30
(anonymous) @ main.js:1
zone-mix.js:3292 ERROR Error: connect ETIMEDOUT 192.168.4.127:22
    at Object._errnoException (util.js:1024)
    at _exceptionWithHostPort (util.js:1046)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1182)

That's ok I know what's happening, the thing is I want to handle when it's success and when it's an error, for example if the connection is stablished to console.log an ok and if its not then console.error an error.

Basically what I need is to make the promise work, anyone can help me?

Thank you so much and sorry if I'm not being clear.

User100696
  • 687
  • 4
  • 12
  • 26
  • 1
    Well, just read your code: in your callback, you always resolve the promise, and then after, you check if there is an error, and reject the promise. But it's too late, you have already resolved it. Check if there is an error first. if there is, reject, else, resolve. It's one or the other, not both. This has absolutely nothing to do with angular, BTW. – JB Nizet Oct 27 '18 at 06:12
  • @JBNizet I got it fixed, thank you. – User100696 Oct 27 '18 at 14:41

1 Answers1

0

As JB Nizet mentioned I got it fixed this way

const ssh = new Promise(function (resolve, reject) {
  const conn = new ssh2Client.Client();
  conn.on('error', function (error) {
    if (error.level) {
      reject(error);
    }
    conn.end();
  });
  conn.on('ready', function () {
    resolve();
  })
    .connect(connObject);
});
return ssh;

I have to handle the error first to reject, else resolve the promise

User100696
  • 687
  • 4
  • 12
  • 26