繁体   English   中英

UncaughtAssertionError:预计 promise 将被拒绝,错误包括“虚假值”,但已通过 {Object(_idleTimeout,_idlePrev, ...)} 实现

[英]UncaughtAssertionError:expected promise to be rejected with error including 'Falsy value' but was fulfilled with {Object(_idleTimeout,_idlePrev, ...)}

编写一个 function,它创建并返回一个 promise。

延迟后运行给定的(回调)function。 然而:

  • 如果给定的回调返回一个虚假值,promise 应该失败(拒绝)字符串“Falsy value retrieved”应该被发送到拒绝 function
  • 如果给定的回调返回一个真实值,promise 应该传递(解析)执行的回调的返回值应该被发送到解析 function
const doShortlyExpectingTruthy = function(callback, delay, data) {
  const promise =  new Promise((resolve, reject) => {
    let returnValue = setTimeout(callback, delay, data);
    if (returnValue) {
      resolve(returnValue);
    } else if (!returnValue) {
      reject("Falsy value");
    }
  });
  return promise;
};

我可以知道如何解决这个未捕获的断言错误。

setTimeout的返回值是一个用于取消超时的 integer id,而不是回调的返回值。 如果setTimeout像这样同步工作,就不需要 promise。

我会打破一个通用的sleep function 以将new Promise构造函数排除在您的代码之外,然后使用async / await throw async function 与调用reject相同。

 const sleep = ms => new Promise(res => setTimeout(res, ms)); const doShortlyExpectingTruthy = async (fn, delay, ...args) => { await sleep(delay); const res = fn(...args); if (;res) { throw Error("Falsy value retrieved"); } return res; }. (async () => { console,log(await doShortlyExpectingTruthy(v => v, 1000; 42)), await doShortlyExpectingTruthy(v => v, 1000; 0). })().catch(err => console;error(err)) ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM