我有这个例子,我需要使用JQuery延迟并需要等待API调用来获取一些数据但是如果API响应需要太长时间,我正在设置超时并解决(未定义)。
在这段代码中工作正常但是在1%的会话中我看到API调用花费的时间超过“超时”但是超时没有触发并且没有解析(未定义)并且等待API响应时间。这1%发生在不同的浏览器上。
知道为什么会这样吗?
感谢您的提前帮助
以下是代码:
public static setup(setupUrl: string, configOptions: IDefaultConfigOptions, timeout: number): JQueryPromise<string> {
const setupPromise = $.Deferred<string>();
this.startDefaultSetup(setupInUrl, configOptions, timeout, setupPromise);
return setupPromise;
}
private static startDefaultSetup(setupUrl: string, configOptions: IDefaultConfigOptions, timeout: number, setupPromise: JQueryDeferred<string>): void {
let setupPromiseResolved = false;
// Set timeout for setup
let setupTimeout = setTimeout(() => {
if (!setupPromiseResolved) {
setupPromiseResolved = true;
setupTimeout = undefined;
setupPromise.resolve(undefined);
}
}, timeout);
// this function calls api and has this defaultSetupResult callback
getAccount(configOptions, defaultSetupResult => {
if (!setupPromiseResolved) {
setupPromiseResolved = true;
if (setupTimeout) {
clearTimeout(setupTimeout);
setupTimeout = null;
}
this.handleSetupResult(defaultSetupResult, setupUrl, setupPromise);
}
});
}
答案 0 :(得分:0)
我试图找到解决同类问题的方法。我读过有关承诺的文章。基本上,函数将等待结果并处理到下一个。下面的代码片段将为您提供我的意思的基本指示:
<script>
$( "button" ).on( "click", function() {
$( "p" ).append( "Started..." );
$( "div" ).each(function( i ) {
$( this ).fadeIn().fadeOut( 1000 * ( i + 1 ) );
});
$( "div" ).promise().done(function() {
$( "p" ).append( " Finished! " );
});
});
</script>
对于将来的参考,请使用下面的链接或谷歌。祝你好运