Node UnhandledPromiseRejectionWarning

我有一个像这个问题,我的NPM包问题,但我不知道如何解决

什么是未处理的承诺拒绝

这是我的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 

我该如何解决呢?

你不正确地捕获你的cli文件中的错误。 事实上,你根本不处理退还的承诺,并传递一个未使用的callback。 尝试改变

 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); }); 

发生这种情况是因为在你的信息函数中发现了错误之后,你又把它扔了下去。