Javascript 将 setTimeOut 链接到 Promise,寻找一个非常示例的示例

标签 javascript

为了防止 hell 金字塔编程,我正在寻找使用“Promise”,但我仍然不熟悉。

例如,我有这个丑陋的代码:

var timeA = 500;
var timeB = 800;
var timeC = 750;

window.setTimeout(function(){
    //do stuff 1
    window.setTimeout(function(){
    //do stuff 2
        window.setTimeout(function(){
        //do stuff 3
        }, timeA);
    }, timeB);
}, timeC);

如何使用 Promise 机制更改我的代码? 谢谢:)

最佳答案

您需要将 setTimeout 包装到 Promise 中。

下面我还展示了如何使用async/wait..

var timeA = 500;
var timeB = 800;
var timeC = 750;

function wait(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

/*wait(timeA).
  then(() => console.log("timeA")).
  then(() => wait(timeB)).
  then(() => console.log("timeB")).
  then(() => wait(timeC)).
  then(() => console.log("timeC")); */

async function run() {
  await wait(timeA);
  console.log("timeA")
  await wait(timeB);
  console.log("timeB")
  await wait(timeC);
  console.log("timeC");
}

run();

关于Javascript 将 setTimeOut 链接到 Promise,寻找一个非常示例的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51302133/

相关文章:

javascript - ng-model 未捕获 ng-repeat 中的值

javascript - Google Script 中的 onEdit(e) - 尝试将最后编辑日期放入单元格并在某些工作表(选项卡)上排除此功能

javascript - SetTimeout + fs.writeFile 删除我的对象

javascript - 如何让这个多幻灯片面板无限循环

javascript - Mongoose 在两个时间范围之间选择查询

javascript - 使用从表单发布返回到 Web 服务的结果

javascript - 删除选择框reactJS中出现的编辑和删除按钮

javascript - Ajax POST 函数

javascript - Vue + 嵌套组件创建

javascript - 由于 KMS 使用 AES,您可以在客户端上使用 AES 加密并在服务器上使用 KMS 加密吗?