我正在学习JS中的Promise,我几乎没有与之相关的查询。
这是我的代码段,
var promise = new Promise(
(resolve, reject) => {
var data = 'resolve';
resolve(data);
console.log('promise executor');
});
setTimeout(
() => {
promise.then(
(data) => {
console.log(data);
});
promise.then(
(data) => {
console.log(data);
});
}, 2000);
输出为,
promise executor
resolve
resolve
从上面的输出中,我了解到executor
的主体在构建Promise期间立即执行。现在,我的疑问/疑问如下,
executor
执行期间,resolve
实际上是未定义的。不过,浏览器不会抛出错误并丢弃通话,怎么样?resolve
功能。尽管executor
已经执行并且data
变量已经失去生命,浏览器仍会调用该函数。怎么样?resolve
也会产生输出。它对.then()
的调用次数是否有限制?答案 0 :(得分:1)
resolve
promise
构造函数有一个自然参数 - 存在。 (可以随意添加console.log(typeof resolve);
)data
变量此时并不存在,但是承诺仍然以'resolve'
值解决。因此,添加到承诺中的.then
将立即以该值运行。.then
。如果需要,请查看文档:{{3}} 答案 1 :(得分:1)
1 。承诺可能处于以下三种可能状态之一:已履行,已拒绝或待处理。承诺用户可以附加回调来处理已履行的价值或拒绝的原因。
promise构造函数接受一个参数,一个带有两个参数的回调,解析和拒绝。在回调中做一些事情,也许是异步,然后在一切正常的情况下调用resolve,否则调用reject。
promise是一个可以从异步函数同步返回的对象。它将处于以下三种可能状态之一:
已实现:将调用onFulfilled()(例如,调用resolve())
拒绝:将调用onRejected()(例如,调用reject())
待定:尚未履行或拒绝
如果承诺没有待决(已经解决或拒绝),则承诺得到解决。有时候人们使用已经解决并且已经解决了同样的事情:没有待决。 一旦安顿下来,承诺就无法重新安置。再次调用resolve()或reject()将不起作用。固定承诺的不变性是一个重要特征。
2 。事实承诺有时不立即解决,有时推迟意味着API是一致的。否则,您将按执行顺序获得未定义的行为。
3 。一旦承诺得到解决,.then
函数会立即被调用,因此,如果对于一个承诺,您编写了n
个.then
个函数,则所有将同时执行与解决方案中发送的相同数据。