首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点UnhandledPromiseRejectionWarning

节点UnhandledPromiseRejectionWarning
EN

Stack Overflow用户
提问于 2017-03-17 23:09:19
回答 1查看 7.2K关注 0票数 2

我对我的npm方案有一个问题,像这样的问题,但我不知道如何解决

What is Unhandled Promise Rejection

这是我的index.js:

代码语言:javascript
复制
'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

代码语言:javascript
复制
#!/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);
});

如果我试图在本地安装:

代码语言:javascript
复制
npm install . -g
npm link

然后改变目录并安装:

代码语言:javascript
复制
cd ../otherDir
npm install ../my-package

并发射它

代码语言:javascript
复制
my-package somePackage

我明白了:

代码语言:javascript
复制
(node:2145) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): RequestError: getaddrinfo ENOTFOUND function function:80

我该怎么解决呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-17 23:43:36

您无法正确捕获cli文件中的错误。事实上,您根本不处理返回的承诺,而是传递一个未使用的回调。试着改变

代码语言:javascript
复制
info(input, function (err, version) {
    if (err) {
        console.error(err);
        process.exit(1);
        return;
    }

    console.log(version);
});

代码语言:javascript
复制
info(input)
.then(version => console.log(version))
.catch(err => {
  console.error(err);
  process.exit(1);
});

这是因为在您捕捉到info函数中的错误之后,您会再次抛出它,并将其抛到更深的链中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42868449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档