我编写的代码看起来像:
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构造函数反模式 ",这个代码有什么不好,为什么这被称为 …
假设我有一个函数someFunction(),我无法控制它的内部内容。我希望运行这个函数不超过 5 秒。
我尝试过使用 asetTimeout或setInterval这样的:
try {
const timeoutId = setTimeout(() => {
throw new Error("Time over");
}, 5000);
someFunction();
clearTimeout(timeoutId);
} catch (e) {
...
}
Run Code Online (Sandbox Code Playgroud)
问题在于,如果存在无限循环,someFunction()则永远不会调用超时。
解决这个问题最简单的方法是什么?我考虑过使用工作线程,但在我的情况下将参数传递给另一个线程是有问题的。
多谢!