Ich habe den folgenden Code erhalten. Ich habe erwartet, dass die „Kernausnahme“ von der „sofort ausgeführten Funktion (siehe Ende)“ abgefangen und „Im Hauptbereich erhalten“ ausgegeben werden könnte, aber er wurde nicht wie erwartet ausgeführt heißt: „Im Hauptbereich erhalten“ wird nicht gedruckt.
'use strict';
function core() {
function wrapper() {
return new Promise((resolve, reject) => {
throw new Error("wrapper exception rises");
});
}
return new Promise(async (resolve, reject) => {
try {
await wrapper();
} catch(error) {
console.error(error.message);
throw new Error("core exception rises");
}
});
}
(async function() {
try {
await core();
} catch(error) {
console.error(error.message);
console.error("Got it in main scope");
}
})();
Das Ergebnis der Ausführung des Programms ist
wrapper exception rises
(node:10093) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 3): Error: core exception rises
(node:10093) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Wer kann bei der Erklärung helfen? Vielen Dank!
Ich verwende Knoten v7.2.1
简化的例子是这样的:
改改:
或者:
你代码的问题是,
core exception rises
这个地方的Promise
既没有resolve
,也没有reject
,所以你要怎样呢?^^为什么我只有做如下的修改,才能得到预期的结果呢? 是不是和microtask有关呢?谁能帮忙清楚地解释一下?
得到的运行结果为:
<script>alert(‘s’)</script>