Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 发送到客户端且未经处理的承诺拒绝后,无法设置标头_Javascript_Node.js_Express_Unhandled Exception_Unhandled - Fatal编程技术网

Javascript 发送到客户端且未经处理的承诺拒绝后,无法设置标头

Javascript 发送到客户端且未经处理的承诺拒绝后,无法设置标头,javascript,node.js,express,unhandled-exception,unhandled,Javascript,Node.js,Express,Unhandled Exception,Unhandled,这个代码块总是给我错误- UnhandledPromisejectionWarning:错误[ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置头 未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。要在未处理的承诺拒绝时终止节点进程,请使用CLI标志--unhandled rejections=strict(请参阅) 有人能帮我一下吗?您没有检查创建播放列表的返回值 假设

这个代码块总是给我错误-

UnhandledPromisejectionWarning:错误[ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置头

未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。要在未处理的承诺拒绝时终止节点进程,请使用CLI标志
--unhandled rejections=strict
(请参阅)


有人能帮我一下吗?

您没有检查创建播放列表的返回值

假设在创建播放列表中发现错误,并且错误['statusCode']!==401,然后转到res.status(400).send(err)

然后您将转到search_和add,因为您刚刚发送了响应,但没有告诉代码中止(在“main”函数中使用try-catch)。现在,如果您有一个错误,并且它的代码与401不同,那么您将再次发送响应

为单个呼叫发送两次响应将导致此消息:

UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

注意您的响应,无论何时使用res.status(4xx).send(err),都要中止整个呼叫,因为在此之后您将无法向客户端发送成功的响应。

您没有检查create\u playlist的返回值

假设在创建播放列表中发现错误,并且错误['statusCode']!==401,然后转到res.status(400).send(err)

然后您将转到search_和add,因为您刚刚发送了响应,但没有告诉代码中止(在“main”函数中使用try-catch)。现在,如果您有一个错误,并且它的代码与401不同,那么您将再次发送响应

为单个呼叫发送两次响应将导致此消息:

UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

注意您的回复,无论何时使用res.status(4xx).send(err),都要中止整个呼叫,因为在此之后您将无法向客户端发送成功的回复。

谢谢,这很有帮助!但是,我该怎么流产呢?我应该在哪里尝试放弃捕获?抱歉,我不熟悉这种方法,您可以通过包含函数调用(创建播放列表和搜索添加),并在创建播放列表和搜索添加中更改捕获,以仅抛出错误,通常会给出:
.catch(err){throw err}
,在主函数中,将catch回调更改为之前创建播放列表、搜索和添加的catch回调。这样,如果create_playlist失败,您将在主函数中获得错误对象,因此如果您发现错误,尝试将停止,因为您抛出了错误,并且将只发送错误响应我尝试这样做。但是,现在它总是给我这个错误-未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。要在未处理的承诺拒绝时终止节点进程,请使用CLI标志
--unhandled rejections=strict
(请参阅)。(拒绝id:7)你知道我如何摆脱这个吗?你能把你的新代码粘贴在这里(或者发送一个包含它的链接),这样我就可以检查一切是否正常了吗?谢谢,这很有帮助!但是,我该怎么流产呢?我应该在哪里尝试放弃捕获?抱歉,我不熟悉这种方法,您可以通过包含函数调用(创建播放列表和搜索添加),并在创建播放列表和搜索添加中更改捕获,以仅抛出错误,通常会给出:
.catch(err){throw err}
,在主函数中,将catch回调更改为之前创建播放列表、搜索和添加的catch回调。这样,如果create_playlist失败,您将在主函数中获得错误对象,因此如果您发现错误,尝试将停止,因为您抛出了错误,并且将只发送错误响应我尝试这样做。但是,现在它总是给我这个错误-未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。要在未处理的承诺拒绝时终止节点进程,请使用CLI标志
--unhandled rejections=strict
(请参阅)。(拒绝id:7)你知道我如何摆脱这个问题吗?你能把你的新代码粘贴到这里(或者发送一个包含它的链接),这样我就可以检查一切是否正常了吗?