2016-01-18 107 views
0

我用下面的代碼來檢查一些應用程序端口currenlty它的工作,但我在第三else語句承諾拒絕錯誤 - 未處理的廢品:收

Unhandled rejection Error: Port is not open 

我如何處理,進行了錯誤? 我用藍鳥

checkPortStatus: function(port, host){ 
    return new Promise((resolve, reject) => { 
    portscanner.checkPortStatus(port, host, function(error, status) { 
     if(error) 
     reject(error); 
     else if(status === 'open') 
     resolve(status); 
     else 
     reject(new Error('Port is not open')); 
    }); 
    }); 
}, 

回答

1

最後,你需要處理拒絕的承諾,例如使用.catch():代碼調用checkPortStatus的

obj.checkPortStatus(port, host).then((status) => { 
    ... 
}).catch((err) => { 
    // handle the error here... 
}); 
1

屬性導致未處理的異常。

該代碼可能看起來像

somePromiseFunction() 
.then(checkPortStatus(port, host)) 
.then(someOtherPromiseFunction()) 

這將(最小)「處理」的異常,如果它看起來更像

somePromiseFunction() 
.then(checkPortStatus(port, host)) 
.catch(function(error) { 
    console.log(error.message); 
}) 
.then(someOtherPromiseFunction() 

有沒有在你的代碼在這方面的麻煩:當使用resolvereject,也有必要使用return。所以,而不是resolve(),使用return resolve();與reject相同。

一個附註,以防萬一:一旦您添加return s我提到,代碼中的每個else語句都立即以return開頭。您可以刪除else語句。

祝你好運!

+1

不需要添加'return'(參見[示例代碼](http://bluebirdjs.com/docs/api/new-promise.html)),但我確實認爲它會使代碼有點結構化。 – robertklep

+0

@robertklep感謝分享。這在過去可能有所不同;我很欣賞這些信息。知道這一點,我會清理一下我的代碼。 – BaldEagle

相關問題