有这段代码,我不清楚其中的一个方面:
'use strict';
let promise = new Promise((resolve, reject) => {
resolve("Промис завершился");
console.log("Промис ждет, пока я появлюсь");
});
promise
.then(
result => console.log("Fulfilled: " + result),
error => console.log("Rejected: " + error)
);
其实不清楚构造函数中的alert一般是自己算出来出现的。紧随其后(一点也不清楚——为什么在它后面?)“承诺已经结束”出现了。
目前尚不清楚它的工作原理是什么resolve(),即控制权转移到处理程序.then。
我已经多次看到它们resolve()专门放在处理程序 onload中(例如,对于 ajax 请求),这本身就表明问题已完成。但事实证明,resolve()您至少可以从一开始就推动,下面的代码仍然有效。
是的,当然,在ajax的情况下,你可以预料到请求会被服务器拒绝,所以你需要resolve()在成功的情况下使用它,并reject()在错误的情况下使用它。
帮助我理解。
Promise(承诺)本身不等待任何人。
您只需具备处理同步和异步代码的能力。
创建的 Promise立即同步执行(实际上它取决于实现),并在事件循环的下一个周期通知其订阅者(然后)。
让我们通过一个例子来看看它的行为:
如您所见,在创建后,Promise 立即(同步)启动了它的执行器,但是 then 中的处理程序将在 eventLoop 的下一次迭代中被调用。
一个内部实现的例子(非常精简):
在 JS 中,只有 or
return,一个错误,或者它的结束可以停止一个函数。阅读。
在等待时,使用了某种异步方法(否则它无法捕获异步操作,你的 KO):当承诺被解决时,回调排队直到函数中等待代码的末尾,然后才被调用。
如果不需要,请使用
return:return resolve();。resolve()一个普通的回调函数,一个告诉 promise 进入 fulfilled 状态的调用。resolve()不会停止 promise 中函数的执行。我会引用这篇文章,以免误会:
也就是说,
resolve它不会立即调用该函数,而是等待 endфункции-executor,这是在创建时传递的promise-a