javascript - Promise 链上的 2 个函数被异步调用
问题描述
我正在学习 javascript Promise。我创建了 2 个独立的函数,并将它们链接在一个 promise 函数中。然而,第二个函数首先被调用,即使它位于第二个 then() 块中。
代码如下。
const one = document.getElementById('one');
function clkw(a){
setTimeout(() => {
one.innerHTML = a;
return 2*a;
}, 2000);
}
function clkw2(b){
setTimeout(() => {
one.innerHTML += ' '+b;
}, 2000);
}
function trypromise(){
const np = new Promise(resolve => {
setTimeout(() => {
resolve(10)
}, 2000);
});
np
.then(function(data){
return clkw(data);
})
.then(function(bata){
clkw2(bata);
});
}
解决方案
然而,第二个函数首先被调用,即使它位于第二个 then() 块中。
在您提供的代码中,一切都按预期工作。你是如何观察到这种奇怪的行为的?
const one = document.getElementById('one');
function clkw(a) {
console.log("clkw");
setTimeout(() => {
one.innerHTML = a;
return 2 * a;
}, 2000);
}
function clkw2(b) {
console.log("clkw2");
setTimeout(() => {
one.innerHTML += ' ' + b;
}, 2000);
}
function trypromise() {
const np = new Promise(resolve => {
setTimeout(() => {
resolve(10)
}, 2000);
});
np
.then(function(data) {
return clkw(data);
})
.then(function(bata) {
clkw2(bata);
});
}
trypromise()
<div id="one"></div>
推荐阅读
- python - 如何从较大的 pytorch 张量中提取张量到 numpy 数组或列表
- python-requests - 如何在 Python 请求中使用 3DS 信用卡确认?
- python - SQLAlchemy:SQLite 中的回滚事务
- function - Glob 作为 shell 函数的参数
- visual-studio-code - 为什么 VSCode 乳胶片段不起作用(// 字符)?
- spring - Spring Boot 是否支持基于 URL 模式的多种内容协商策略
- c# - 使用按钮重新排序 GridView
- matlab - MATLAB App Designer 代码错误(针对 MCC DAQ)
- cordova - Capacitor Motion 插件未显示为已安装
- amazon-web-services - Amazon chime list 私有应用程序实例通道错误