相关疑难解决方法(0)

设置bluebird.js承诺解析的最小延迟

我想保证bluebird.js的分辨率最小延迟承诺.

举个例子,假设我正在将一个请求包含在一个承诺中.我想要的行为是,如果请求少于5秒,我想人为地将承诺解析的延迟增加到5秒.如果请求超过5秒,我不希望添加任何人工延迟 - 所以它比为每个请求添加静态延迟要复杂一些.所有这一切都应该完全隐藏在承诺的消费者身上 - 他们应该看到承诺在5秒或更长时间内得到解决.

为了演示,我有一个简单的模拟实现示例,它将模拟的请求延迟硬编码为3秒.

我的第一次尝试是这样的 - 使用setTimeout确保在5秒之前没有调用解析回调.

在这里小提琴

function getTimestamp() {
  return new Date().getTime();   
}

function makeCallWith3SecondLatency(cb) {
  console.log('mocking a call with 3 second latency...');
  var mockResult = 'the result';
  setTimeout(function() { cb(mockResult); }, 3000);
}

function doSomethingAsync(minDelay) {
  return new Promise(function(resolve) {
    var calledAt = getTimestamp();
    makeCallWith3SecondLatency(function(arg) {
      var actualDelay = getTimestamp() - calledAt;
      if(actualDelay < minDelay) {
        var artificialDelay = minDelay - actualDelay;
        console.log('artificially delay another ' + artificialDelay + ' millis'); …
Run Code Online (Sandbox Code Playgroud)

javascript promise bluebird

4
推荐指数
1
解决办法
4897
查看次数

标签 统计

bluebird ×1

javascript ×1

promise ×1