我创建了两个Promise,但是我没有对那些Promise运行then方法。但是,一旦Promise对象超出范围,Promise代码就会像调用.then
一样运行。
如何在不调用Promise
方法的情况下解决.then
?
我之所以问是因为我想用Promise
对象加载一个数组,然后依次运行promise。
function promises_createThenRun() {
const p1 = createPromise1();
const p2 = createPromise2();
console.log('before hello');
alert('hello');
console.log('after hello');
// the two promises run at this point. What makes them run?
}
function createPromise1() {
let p1 = new Promise((resolve, reject) => {
window.setTimeout(() => {
console.log('timer 1');
resolve();
}, 2000);
});
return p1;
}
function createPromise2() {
let p2 = new Promise((resolve, reject) => {
window.setTimeout(() => {
console.log('timer 2');
resolve();
}, 1000);
});
return p2;
}
答案 0 :(得分:4)
Promise构造函数中的代码在创建promise时运行,并且同步运行,这使某些人感到惊讶。因此,即使没有then()
,一切仍然可以运行。
new Promise(resolve => console.log("running"))
setTimeout
的回调中的代码直到被调用后才运行,但即使没有then()
,它也将运行
new Promise(resolve => {
console.log("promise created")
setTimeout(() => console.log("this runs later"), 1000)
})
答案 1 :(得分:3)
在致电.then
时,您只需设置一个“回调”即可说出完成诺言后应该发生的情况。因此,无论是否声明此类回调,都会调用promise。
想象一下调用AJAX请求的Promise。调用.then
并传递一个函数将使其在ajax调用完成时成功运行(是否成功,如超时或其他错误)。但是不调用.then
不会停止请求的运行。您将不会对请求的结果做出任何反应。
答案 2 :(得分:0)
我认为,如果您不对他们进行呼叫/捕获/最后处理,那么“承诺将不会运行”。但是,如果您认为这些方法会返回新的Promises,并且根据您的逻辑,则需要对这些返回的Promises进行then / catch / finally调用才能“运行”它们,您将陷入无限循环)) )