javascript - promise 链中 promise 之间的延迟

标签 javascript ecmascript-6 promise delay es6-promise

假设我正在使用以下代码连续运行几个 promise:

let paramerterArr = ['a','b','c','d','e','f']
parameterArr.reduce(function(promise, item) {
  return promise.then(function(result) {
    return mySpecialFunction(item);
  })
}, Promise.resolve())

代码只是简单地调用 mySpecialFunction(它返回一个 promise ),等待 promise 得到解决,然后再次调用 mySpecialFunction 等等。因此该函数以正确的顺序为数组中的每个元素调用一次。

我如何确保每次调用 mySpecialFunction(item) 之间至少有 50 毫秒的延迟?

以正确的顺序执行 promise 很重要,mySpecialFunction 的执行时间每次都不同。

我想同步 sleep 会起作用,但我不打算在单独的线程中运行这段代码,所以它会导致浏览器中令人讨厌的 ui 卡住。

我不确定 setTimer 是否可以以某种方式用于此目的。我的意思是我不能延迟 promise 的返回。

最佳答案

答案很好,但它们等待的时间太长,因为所有答案都在等待实际操作是否已经超过 50 毫秒。

你可以为它使用 Promise.all

const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
let parameterArr = ['a','b','c','d','e','f'];
parameterArr.reduce(function(promise, item) {
  return promise.then(function(result) {
    return Promise.all([delay(50), myPromise(item)]);
  });
}, Promise.resolve());

关于javascript - promise 链中 promise 之间的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41079410/

相关文章:

reactjs - 为子项提供属性时如何将正确的类型分配给 React.cloneElement?

c++ - 使用 C++ future 作为函数堆栈中的中间值会导致段错误

javascript - 如何从 Promise 内部设置一个在 Promise 外部初始化的变量?

JavaScript 不从文本框中检索文本

javascript - 使用jquery从字符串中获取元素

npm - babel-cli 没有按预期工作

javascript - 错误: Invariant Violation: addComponentAsRefTo when using react-router

javascript - Protractor/WebDriverJS 将元素值作为对象数组返回

asp.net - 如何在 ASP.NET 中通过 Post 将信息传递到 iframe?

javascript - window.open() 在 IE6 和 IE7 中不起作用