当前位置: 首页 > 知识库问答 >
问题:

节点8.6 javascriptpromise:UnHandledPromiseRejtionWarning

司寇飞航
2023-03-14

我有一个错误:(节点: 6186)UnhandledPromiseRejtionWarning: UnHandledPromiseRejtionWarning: UnHandledPromiseRejtionWarning: UnHandledPromiseRejtionWarning(拒绝id: 1): triep(节点: 6186)[DEP0018]DeprecationWarning:未处理的promise拒绝被弃用。将来,未处理的promise拒绝将终止Node.js进程,退出代码为非零. -------- ========= 两个CaughtCachError三个(节点: 6186)promise拒绝处理警告:promise拒绝被异步处理(拒绝id: 1)我正在按照嵌套顺序使用我的3个promise函数。p1,p2,p3-是我的promise函数,如下所示。我尝试在所有p1,p2,p3函数中添加promise拒绝,但它仍然相同

enter code here
var p1 = new Promise(function (resolve, reject) {
    setTimeout(function () {
       // resolve('ones')
                resolve('ones')
    }, 9000)
})
var p2 = new Promise(function (resolve, reject) {
    setTimeout(function () {
        // throw new Error('eeeee');
        //reject('two')
    resolve('two')
    }, 1000)
})
var p3 = new Promise(function (resolve, reject) {
    setTimeout(function () {
        reject('three')
    }, 4000)
})

p1.then(function(result){
    console.log("--------", result)
        // return p2.then(function(res){console.log(res)}).catch(function(err){console.log(err)})
        return p2
}).then(function(p2result){
    console.log("=========", p2result)
    return p3;
}).then(function(p3result){
    console.log('*********', p3result)
}).catch(function(err){
    console.log("CaughtCathchError", err)
})

共有3个答案

丘友樵
2023-03-14

如果您想创建一个拒绝/拒绝的promise,它将被捕获在队列中,而不是堆栈中,那么您可以执行以下操作:

var p3 = new Promise(function (resolve, reject) {
    setTimeout(function () {
        reject('three')
    }, 400)
});
//do not warn for p3 rejection but if you use it later (p3.then) or
//  return it in a promise chain you will have to catch it again
p3.catch(ignore=>ignore);
濮阳繁
2023-03-14

节点。js promise实现希望被拒绝的promise与catch(…)链接 然后(…,…) 同步,否则会出现PromisejectionHandledWarning。未经处理的拒绝promise可能导致将来的例外情况。

通常,拒绝应该被视为任何其他错误,因此它最好是error实例,而不是普通字符串。然后可以这样处理:

class ExpectedRejection extends Error {}

var p3 = new Promise(function (resolve, reject) {
    setTimeout(function () {
        resolve(new ExpectedRejection('three'))
    }, 4000)
})

...
.then(function(p3result){
  if (p3result instanceof ExpectedRejection)
    throw p3result;

  console.log('*********', p3result)
}).catch(function(err){
    console.log("CaughtCathchError", err)
})

类是特定的,可能不需要;可以替换为错误无处不在,因为错误解决方案是不常见的。

这种解决方案不是很常见,因为如果同时创建promise,它们彼此不依赖,通常可以使用Promise来处理。全部

Promise.all([p1, p2, p3])
.then(function(p1result, p2result, p3result){
    console.log('*********', p3result)
}).catch(function(err){
    console.log("CaughtCathchError", err)
});

请注意,由于p1p2p3是同时创建的延迟,因此在这两种情况下,都会在9秒(延迟的最大持续时间)后触发catch

齐威
2023-03-14

p3是一个独立的promise,没有。捕捉。因此,当p3拒绝ed时,您会得到未处理的PromisejectionWarning。即使p3在具有适当的catchPromise链中稍后被消费,p3本身也没有catch

您可以使用返回promise的函数,而不是p3,并确保捕获对该函数的所有调用:

var p1 = new Promise(function (resolve, reject) {
    setTimeout(function () {
       // resolve('ones')
                resolve('ones')
    }, 1000)
})
var p2 = new Promise(function (resolve, reject) {
    setTimeout(function () {
        // throw new Error('eeeee');
        //reject('two')
    resolve('two')
    }, 1000)
})
var getp3 = () => new Promise(function (resolve, reject) {
    setTimeout(function () {
        reject('three')
    }, 1000)
})

p1.then(function(result){
    console.log("--------", result)
        // return p2.then(function(res){console.log(res)}).catch(function(err){console.log(err)})
        return p2
}).then(function(p2result){
    console.log("=========", p2result)
    return getp3();
}).then(function(p3result){
    console.log('*********', p3result)
}).catch(function(err){
    console.log("CaughtCathchError", err)
})

 类似资料:
  • 如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?

  • Text 节点的概念 文本节点(Text)代表元素节点(Element)和属性节点(Attribute)的文本内容。如果一个节点只包含一段文本,那么它就有一个文本子节点,代表该节点的文本内容。 通常我们使用父节点的firstChild、nextSibling等属性获取文本节点,或者使用Document节点的createTextNode方法创造一个文本节点。 // 获取文本节点 var textNo

  • Text节点的概念 Text节点的属性 data wholeText length nextElementSibling previousElementSibling Text节点的方法 appendData(),deleteData(),insertData(),replaceData(),subStringData() remove() splitText(),normalize() Docu

  • 负载均衡集群中的节点用于监听负载均衡实例,并将客户端的请求根据监听和转发规则将其转发给后端服务器。 负载均衡集群中的节点用于监听负载均衡实例,并将客户端的请求根据监听和转发规则转发给后端服务器。 同一个集群下可以有多个转发节点,但同一时刻只有一个节点作为Master节点提供转发服务。属于一个集群的节点的VRRP路由ID必须相同。 节点生命周期管理: 新建节点:设置节点的配置参数。 部署节点:将节点

  • 节点是Pod的实际运行环境。 该页面仅显示在云管平台创建的Kubernetes集群的节点信息。 一个Kubernetes集群由1~3个控制节点和n个计算节点组成。节点是Pod的实际运行环境。 控制节点(controlplane):即Master节点,由三个紧密协作的独立组件组合而成,它们分别是负责API服务的kube-apiserver、负责调度的kube-scheduler,以及负责容器编排的k

  • 所以我环顾了一下网络,在stackoverflow中有几个问题是定义: 通常,内部节点是任何不是叶子的节点(没有子节点) 非叶/非末端/内部节点-至少有一个度不等于0的子节点或后代节点 据我所知,它是一个节点,而不是一片叶子。 我即将得出结论,根也是一个内部节点,但它的定义似乎有些模糊,如图所示: 二元搜索树中的“内部节点”是什么? 正如这张精彩的图片所示,内部节点是位于树根和树叶之间的节点 如果

  • 在本章中,我们将详细介绍XPath表达式,其中包括常见的节点类型,XPath定义和句柄。 序号 节点类型 描述 1 Root XML文档的根元素节点。 2 Element 元素节点。 3 Text 元素节点的文本。 4 Attribute 元素节点的属性。 5 Comment 注释

  • GitBooks为插件提供了不同的节点 API和上下文。这些API可以根据使用的GitBook版本,你的插件应该在package.json中指定engines.gitbook字段。 Book实例 Book接口是GitBook的中心点,它集中了所有的访问读取方法。 //从book.json读取配置 var value = book.config.get('title','Default Value'