相关疑难解决方法(0)

承诺 - 是否有可能强制取消承诺

我使用ES6 Promises来管理我的所有网络数据检索,在某些情况下我需要强制取消它们.

基本上这种情况是我在UI上有一个提前输入搜索,其中请求被委托给后端必须基于部分输入执行搜索.虽然此网络请求(#1)可能需要一点时间,但用户会继续键入哪个最终会触发另一个后端调用(#2)

这里#2自然优先于#1,所以我想取消Promise包装请求#1.我已经拥有数据层中所有Promise的缓存,因此我理论上可以检索它,因为我试图提交#2的Promise.

但是一旦从缓存中检索Promise,我该如何取消Promise#1?

有人可以建议一种方法吗?

javascript promise cancellation

68
推荐指数
4
解决办法
3万
查看次数

如果未能及时完成NodeJS超时承诺

如何在一定时间后超时承诺?我知道Q有一个承诺超时,但我使用的是本机NodeJS承诺而且它们没有.timeout函数.

我错过了一个或其包装不同吗?

或者,下面的实现是否有利于不吸收内存,实际上按预期工作?

我也可以以某种方式将其全局包装,以便我可以将它用于我创建的每个承诺,而不必重复setTimeout和clearTimeout代码?

function run() {
    logger.info('DoNothingController working on process id {0}...'.format(process.pid));

    myPromise(4000)
        .then(function() {
            logger.info('Successful!');
        })
        .catch(function(error) {
            logger.error('Failed! ' + error);
        });
}

function myPromise(ms) {
    return new Promise(function(resolve, reject) {
        var hasValueReturned;
        var promiseTimeout = setTimeout(function() {
            if (!hasValueReturned) {
                reject('Promise timed out after ' + ms + ' ms');
            }
        }, ms);

        // Do something, for example for testing purposes
        setTimeout(function() {
            resolve();
            clearTimeout(promiseTimeout);
        }, ms - 2000);
    });
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

javascript settimeout node.js promise

35
推荐指数
4
解决办法
4万
查看次数

如何取消 javascript 等待睡眠?

javascript 中 sleep 函数最常见的实现是在 setTimeout 解析后返回 Promise:

function sleep(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}
Run Code Online (Sandbox Code Playgroud)

我有带有await sleep的for循环,以防止它执行得太快,例如不要太快地请求xhr。我在其他地方还有一个 isBreak 标志来告诉我何时停止 for 循环。然而,我遇到的问题是,当我中断 for 循环时,之前的等待睡眠已经执行并阻止了 for 循环。有没有更好的方法来打破 for 循环并立即终止等待睡眠?

const items = [];

let isBreak = false; // Somewhere else in the application

for (const item of items) {
  if (isBreak) break;

  // Do something, like xhr request
  await sleep(15000); // 15 seconds sleep

  if (isBreak) break;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让我提前发出信号

javascript

5
推荐指数
1
解决办法
710
查看次数

标签 统计

javascript ×3

promise ×2

cancellation ×1

node.js ×1

settimeout ×1