相关疑难解决方法(0)

什么是明确的承诺构建反模式,我该如何避免它?

我编写的代码看起来像:

function getStuffDone(param) {           | function getStuffDone(param) {
    var d = Q.defer(); /* or $q.defer */ |     return new Promise(function(resolve, reject) {
    // or = new $.Deferred() etc.        |     // using a promise constructor
    myPromiseFn(param+1)                 |         myPromiseFn(param+1)
    .then(function(val) { /* or .done */ |         .then(function(val) {
        d.resolve(val);                  |             resolve(val);
    }).catch(function(err) { /* .fail */ |         }).catch(function(err) {
        d.reject(err);                   |             reject(err);
    });                                  |         });
    return d.promise; /* or promise() */ |     });
}                                        | }
Run Code Online (Sandbox Code Playgroud)

有人告诉我这个被称为" 延迟反模式 "或" Promise构造函数反模式 ",这个代码有什么不好,为什么这被称为 …

javascript promise q bluebird es6-promise

479
推荐指数
3
解决办法
7万
查看次数

5 秒后停止运行未知函数

假设我有一个函数someFunction(),我无法控制它的内部内容。我希望运行这个函数不超过 5 秒。

我尝试过使用 asetTimeoutsetInterval这样的:

try {
   const timeoutId = setTimeout(() => {
      throw new Error("Time over");
   }, 5000);

   someFunction();
   clearTimeout(timeoutId);
} catch (e) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

问题在于,如果存在无限循环,someFunction()则永远不会调用超时。

解决这个问题最简单的方法是什么?我考虑过使用工作线程,但在我的情况下将参数传递给另一个线程是有问题的。

多谢!

javascript node.js

0
推荐指数
1
解决办法
140
查看次数

标签 统计

javascript ×2

bluebird ×1

es6-promise ×1

node.js ×1

promise ×1

q ×1