Node.js 处理多次解析事件
“multipleResolves”是进程模块中Process类的一个事件,当Promise被多次解析时发出。
- 多次解析。
- 多次拒绝。
- 在解析之后拒绝。
- 在拒绝之后解析。
语法:
Event: 'multipleResolves'
参数:
该事件不接受任何参数。
返回值:
该事件不返回任何内容,只返回一个回调函数以进一步操作。
示例1:
index.js
// Node.js program to demonstrate the
// Process 'multipleResolves' Event
// Importing process module
const process = require('process');
// Independent Block which will execute
setTimeout(() => {
console.log('\n')
console.log('Greetings from GeeksforGeeks');
}, 1000);
// Event 'multipleResolves'
process.on('multipleResolves', (type, promise, reason) => {
// Displaying the error
console.log("Type: ", type);
console.log("Promise: ", promise);
console.log("Reason: ", reason);
});
const myFunction = async () => {
const data = await new Promise((resolve, reject) => {
// Calling reject after multiple resolve
resolve('Resolve Call One');
resolve('Resolve Call Two');
resolve('Resolve Call Three');
reject(new Error('Reject Error Called'));
});
return data
}
// Calling our function
myFunction().then();
使用以下命令运行 index.js 文件:
node index.js
输出:
类型:resolve
承诺:Promise { '解析函数调用一' }
原因:解析函数调用二
类型:resolve
承诺:Promise { '解析函数调用一' }
原因:解析函数调用三
类型:reject
承诺:Promise { '解析函数调用一' }
原因:错误:拒绝错误调用
位于数据(C:\ Users \ Lenovo \ Downloads \ GeeksforGeeks \ Node JS \ index.js:27:14)
在新的Promise()
在myFunction(C:\ Users \ Lenovo \ Downloads \ GeeksforGeeks \ Node JS \ index.js:22:23)
在Object <默认>(C:\ Users \ Lenovo \ Downloads \ GeeksforGeeks \ Node JS \ index.js:33:1)
在Module._compile(internal / modules / cjs / loader.js:1138:30)
在Object.Module._extensions..js(internal / modules /cjs / loader.js:1158:10)
在Module.load(internal / modules / cjs / loader.js:986:32)
在Function.Module._load(internal / modules / cjs / loader.js:879:14)
在Function.executeUserEntryPoint [as runMain](internal / modules /run_main.js:71:12)
在internal / main / run_main_module.js中的 internal / main / run_main_module.js:17:47
示例2:
index.js
// Node.js program to demonstrate the
// Process 'multipleResolves' Event
// Importing process module
const process = require('process');
// Event 'multipleResolves'
process.on('multipleResolves', (type, promise, reason) => {
// Displaying the error
console.log("Type: ", type);
console.log("Promise: ", promise);
console.log("Reason: ", reason);
});
const myFunction = async () => {
const data = await new Promise((resolve, reject) => {
// Calling reject after resolve
resolve('Single Resolve call');
reject(new Error('Custom Reason'));
});
return data
}
// Calling our function
myFunction().then();
使用以下命令运行 index.js 文件:
node index.js
输出:
类型: 拒绝
Promise对象: Promise { 'Single Resolve call' }
原因: 错误: 自定义原因
位置: data (C:\Users\Lenovo\Downloads\GeeksforGeeks\Node JS\index.js:19:14)
位置: new Promise (<anonymous>)
位置: myFunction (C:\Users\Lenovo\Downloads\GeeksforGeeks\Node JS\index.js:16:23)
位置: Object.<anonymous> (C:\Users\Lenovo\Downloads\GeeksforGeeks\Node JS\index.js:25:1)
位置: Module._compile (internal/modules/cjs/loader.js:1138:30)
位置: Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
位置: Module.load (internal/modules/cjs/loader.js:986:32)
位置: Function.Module._load (internal/modules/cjs/loader.js:879:14)
位置: Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
位置: internal/main/run_main_module.js:17:47
参考: https://nodejs.org/dist/latest-v16.x/docs/api/process.html#process_event_multipleresolves