我不知道为什么promise1
不断被调用,即使我从未试图解决它。
function successCallback() {
console.log("doSomething func succeeded with sucess");
}
function failureCallback() {
console.log("doSomething func failed with error");
}
let promis1 = new Promise((res, rej) => {
setTimeout(() => {
console.log(`Finally got called`);
return res(successCallback());
}, 5000);
});
function promise2(value) {
return new Promise((res, rej) => {
console.log(`This is getting called for some reason ${value}`)
return res(failureCallback());
});
}
Promise.resolve("6").then(promise2(6));
这是我得到的输出:
这是因为某种原因而被召唤6
doSomething func失败,错误
终于被召唤了
doSomething func成功完成了
[完成]退出,代码= 0,在5.525秒
答案 0 :(得分:2)
传递给new Promise
的函数由promise构造函数立即和同步调用(与setTimeout不同)并且与new Promise
位于同一堆栈上。
如果传递给它的函数抛出,则会导致被拒绝的承诺:
console.log(1);
const p = new Promise(
(res,rej)=>{
console.log(2);
res();
}
);
p.then(
()=>console.log(7)
);
console.log(3);
console.log(4);
const p2 = new Promise(
(res,rej)=>{
console.log(5);
throw("an error");
}
);
p2.catch(
()=>console.log(8)
);
console.log(6);
答案 1 :(得分:2)
也许这会告诉你代码的流程
setTimeout(() => console.log(9)); // 9 will log once all the "synchronous" code below is completed
console.log(1);
let promis1 = new Promise((res, rej) => {
console.log(2);
setTimeout(() => {
console.log(10);
return res('resolved 1');
}, 5000);
});
console.log(3);
function promise2(value) {
console.log(5);
return new Promise((res, rej) => {
console.log(6);
return res('resolved 2');
});
}
console.log(4);
promise2().then(() => {
console.log(8);
});
console.log(7);
注意:一些(大多数?)承诺实现(包括bluebird)将输出1,2,3,4,5,6,7,9,8,10 - 因为.then
回调被添加到最后消息队列的情况 - 然而,在native
承诺中,.then
回调可能会跳过队列! (或者这些天可能还有更多的javascript引擎,而不是this simple model
答案 2 :(得分:-2)
如果这是大型计划的一部分。将let promis1 = new Promise((res, rej) => {
改为promise1 = new Promise((res, rej) => {
提示:拼写“承诺”一词