Joh*_*ohn 12 javascript promise
我正在尝试了解 Promise 是什么,所以我开始遵循本指南。
\n\n我从指南中复制了这段代码,并在我的开发者控制台中进行了尝试:
\n\nvar promise = new Promise(function(resolve, reject) {\n // do a thing, possibly async, then\xe2\x80\xa6\n\n if (false) {\n resolve("Stuff worked!");\n }\n else {\n reject(Error("It broke"));\n }\n});\nRun Code Online (Sandbox Code Playgroud)\n\n我收到一条错误消息说Uncaught (in promise) Error: It broke. 我不明白这是什么意思。谁能解释一下吗?
gma*_*man 14
承诺可以被解决或拒绝。如果是如果/当它被解析时,任何then函数都会被调用。如果被拒绝,catch将调用任何函数。如果您不提供任何catch函数,那么 Promise 可能会有助于打印该警告。
function test(fail) {
return new Promise((resolve, reject) => {
if (fail) {
reject();
} else {
resolve();
}
});
}
// will print rejected 1
test(true)
.then(() => { console.log('resolved 1'); })
.catch(() => { console.log('rejected 1'); })
// might generate the error telling you the promise
// was rejected but you didn't provide a catch function
test(true)
.then(() => { console.log('resolved 2'); })Run Code Online (Sandbox Code Playgroud)
请注意,该消息是浏览器/JavaScript 引擎发出的有用警告。您不必捕获被拒绝的承诺,但通常您希望这样做,因此该消息很有帮助。
重要的是要注意 Promise 如何发挥作用。当您调用时,then(someFunc)它们实际上会列出someFunc稍后要调用的函数列表。如果承诺已经履行,他们将调用列表中的每个函数并清除列表。如果承诺没有兑现,他们将什么都不做,直到兑现为止。catch除了它是一个不同的列表之外,其他都是相同的。
这是一个例子
function makePromiseParts() {
let resolve;
let reject;
const promise = new Promise((_resolve, _reject) => {
log('--in promise--');
resolve = _resolve;
reject = _reject;
});
return {
promise,
resolve,
reject,
};
}
function wait() {
return new Promise(resolve => setTimeout(resolve));
}
async function main() {
{
log('--start--');
const p = makePromiseParts();
log('--after make promise--');
p.promise.then(() => { log('then 1'); });
p.promise.then(() => { log('then 2'); });
log('--before resolve--');
p.resolve();
log('--after resolve--');
await wait();
log('--after waiting--');
p.promise.then(() => { log('then 3'); });
p.promise.then(() => { log('then 4'); });
log('--before waiting--');
await wait();
log('--end--');
}
await wait();
log(' ');
{
log('--start--');
const p = makePromiseParts();
log('--after make promise--');
p.promise.catch(() => { log('catch 1'); });
p.promise.catch(() => { log('catch 2'); });
log('--before reject--');
p.reject();
log('--after reject--');
await wait();
log('--after waiting--');
p.promise.catch(() => { log('catch 3'); });
p.promise.catch(() => { log('catch 4'); });
log('--before waiting--');
await wait();
log('--end--');
}
}
main();
function log(...args) {
const elem = document.createElement('pre');
elem.textContent = [...args].join(' ');
document.body.appendChild(elem);
}Run Code Online (Sandbox Code Playgroud)
pre { margin: 0; }Run Code Online (Sandbox Code Playgroud)
换句话说,then接受一个表示 的函数call this function if and when you're resolved,并catch接受一个表示 的函数call this function if and when you're rejected。
这意味着你的 Promise 抛出了一个未被捕获的错误。
即你没有按照你的承诺调用 .catch() 。
在你的情况下, if(false) 永远不会评估为 true,所以你的承诺被拒绝。
| 归档时间: |
|
| 查看次数: |
23968 次 |
| 最近记录: |