- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一段代码示例,我无法预测代码的流程。
var x = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve([1, 2, 3]);
}, 0);
});
};
x().then((val) => {
console.log(val);
}).catch((err) => {
console.log(err.message);
});
console.log("hello");
for (var i = 0; i < 10; i++) {
console.log(i);
}
var y = Promise.all([Promise.resolve(1), Promise.reject(Error("err"))]);
y.then((arr) => {
console.log(arr);
})
.catch((err) => {
console.log(err);
});
Promise.resolve('ta-da!')
.then((result) => {
console.log('Step 2 received ' + result);
return 'Greetings from step 2';
})
.then((result) => {
console.log('Step 3 received ' + result);
})
.then((result) => {
console.log('Step 4 received ' + result);
return Promise.resolve('fulfilled value');
})
.then((result) => {
console.log('Step 5 received ' + result);
return Promise.resolve();
})
.then((result) => {
console.log('Step 6 received ' + result);
});
日志按以下顺序排列:
"hello"
0
1
2
3
4
5
6
7
8
9
"Step 2 received ta-da!"
"Step 3 received Greetings from step 2"
"err"
"Step 4 received undefined"
"Step 5 received fulfilled value"
"Step 6 received undefined"
[1, 2, 3]
for 循环正在按预期执行。setTimeout() 按预期工作, promise 在事件循环后实现。
其他 2 个 promise 发生冲突。我期待 promise 会立即同步实现,结果会是
"hello"
0
1
2
3
4
5
6
7
8
9
"err"
"Step 2 received ta-da!"
"Step 3 received Greetings from step 2"
"Step 4 received undefined"
"Step 5 received fulfilled value"
"Step 6 received undefined"
[1, 2, 3].
即使 promise 是异步解决的。它们是如何发生冲突的。
附上截图。
最佳答案
您的代码中有三个独立的 promise 链:
x()
开头的,因为超时需要最长的y
开头的那个(来自Promise.all(…)
)抛出错误的地方Promise.resolve('ta-da!')
开头的那个他们不会互相等待 - 你没有告诉他们去做,他们也不会神奇地自己去做。
相反,它们的流程是任意交错的,就像标准异步函数的情况一样(想想两个具有不同周期的 setInterval
)。
I was expecting the promises will be fulfulled immediately in syncronously
没有。 Promise 回调总是(可靠地)是异步的,即使 promise 已经确定。
关于javascript - 如何预测 Promises 的异步性质,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35155041/
Eclipse 坚持在我的项目中启用 JSF 方面。我可以很容易地禁用它,但是当我通过 Eclipse 运行 Maven -> Update Project 时,facet(以及关联的 WEB-INF
我在 Linux 下从 eclipse 导出了一个 SWT 项目,并尝试在 Windows 下导入它。到目前为止,一切都工作正常,除了我似乎失去了该项目的“SWT 性质”。使用 SWT gui 运行项
我有以下项目结构: root-gradle (build.gradle) 项目组 1(无构建文件) project1 (build.gradle) project2 (build.gradle) ..
我正在K8s集群上试验Spark2.3。想知道检查点如何工作?它存储在哪里?如果主驱动程序死了,那么现有处理会怎样? 在从卡夫卡消费时,补偿如何保持?我试图在线查找,但找不到这些问题的任何答案。我们的
我有一个 springboot 项目,它被组织为多个模块。我正在使用 Eclipse 2019-06(版本 4.12)和 jdk 1.8 update 131 和 apache maven 3.3.9
我是一名优秀的程序员,十分优秀!