2017-03-17 43 views
2

我有一個問題,我的NPM包這樣的問題,但我無法弄清楚如何解決節點UnhandledPromiseRejectionWarning

What is Unhandled Promise Rejection

這是我的index.js:

'use strict'; 
var got = require('got'); 
var registryUrl = require('registry-url'); 
var Promise = require('pinkie-promise'); 

module.exports = function (name) { 
    if (typeof name !== 'string') { 
     return Promise.reject(new Error('username required')); 
    } 

    return got.head(registryUrl + name.toLowerCase()) 
     .then(function (res) { 
      return 'test'; 
     }) 
     .catch(function (err) { 
      if (err.statusCode === 404) { 
       err.message = 'Package doesn\'t exist'; 
      } 

      throw err; 
     }); 
}; 

這是我的cli.js

#!/usr/bin/env node 
'use strict'; 
var pkg = require('./package.json'); 
var info = require('./'); 
var argv = process.argv.slice(2); 
var input = argv[0]; 

function help() { 
    console.log(pkg.description); 
    console.log(''); 
    console.log('Usage'); 
    console.log(' $ package-info <package-name>'); 
    console.log(''); 
    console.log('Example'); 
    console.log(' $ package-info pageres'); 
} 

if (!input || argv.indexOf('--help') !== -1) { 
    help(); 
    return; 
} 

if (process.argv.indexOf('-v') !== -1 || process.argv.indexOf('--version') !== -1) { 
    console.log(pkg.version); 
    return; 
} 

info(input, function (err, version) { 
    if (err) { 
     console.error(err); 
     process.exit(1); 
     return; 
    } 

    console.log(version); 
}); 

如果我嘗試在本地安裝:

npm install . -g 
npm link 

然後我改變目錄,並安裝:

cd ../otherDir 
npm install ../my-package 

並啓動它

my-package somePackage 

我得到這個:

(node:2145) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): RequestError: getaddrinfo ENOTFOUND function function:80 

我該如何解決呢?

+0

你可以發佈你實際調用函數的代碼嗎? –

+0

我有更新我的問題,但我需要從終端不啓動另一個代碼現在 –

回答

2

你沒有正確地在你的cli文件中發現你的錯誤。事實上,您根本沒有處理退還的承諾,並傳遞未使用的回調。嘗試改變

info(input, function (err, version) { 
    if (err) { 
     console.error(err); 
     process.exit(1); 
     return; 
    } 

    console.log(version); 
}); 

info(input) 
.then(version => console.log(version)) 
.catch(err => { 
    console.error(err); 
    process.exit(1); 
}); 

這是因爲你發現在你的信息功能錯誤後,你再進一步把它環比下滑。

+0

它現在返回我:RequestError:getaddrinfo ENOTFOUND函數功能:80和一些日誌..是另一個問題或與我的問題? –

+0

@AlessandroMinoccheri這是另一個問題(從'got.head',也許[這個問題](http://stackoverflow.com/q/17690803/1048572),或者一般來說''registry-url'或你的網絡有問題] ,而且與未處理的拒絕無關。它仍然是由錯誤引起的拒絕,但現在你正確處理拒絕(並打印原因)。 – Bergi