gpt4 book ai didi

javascript - 递归 $.ajax 函数并允许浏览器刷新/渲染更新的 div

转载 作者:行者123 更新时间:2023-12-03 07:21:40 25 4
gpt4 key购买 nike

我对 js promise 有疑问,希望有人能帮助我。下面的函数 myFunction 执行 $.ajax 调用,因此返回一个 Promise。由于我需要将控制权交还给浏览器,以便显示该函数在递归时更新的刷新 div,因此我调用 setTimeout,如下所示:

var nextBitOfWork = function () {
return myFunction(email);
};
setTimeout(nextBitOfWork, 0);

其中 myFunction (递归)现在在完成 $.ajax 调用后返回一个 promise 。

如果我只是打电话:

return myFunction(email);

如果没有上面的 setTimeout 函数构造, promise 就会被传递,我的所有 promise 都会被捕获,并允许我获得我需要的数组输出,并且当递归结束时一切都很好。但如果没有 setTimeout,我就无法刷新浏览器。按照上面的方式使用它,我得到了 div 更新刷新显示,但似乎失去了 promise ,因此脚本继续,我无法填充 myFunction 在递归时构建的数组。

关于如何确保 setTimeout 可靠地传递 promise ,以便我构建响应数组并显示 div 更新,有什么想法吗?

提前感谢您的帮助!

好的 - 现在有以下内容:

var func = function () {
myFunction(email);
};
return refreshscreen(func,0);

刷新屏幕在哪里:

function refreshscreen(func,time) {
var timer = $.Deferred();
setTimeout(function () {
return func().then(timer.resolve());
}, time);
return timer.promise();
}

仍然是同样的问题 - 尽管浏览器呈现 div,但我使用 myFunction 为收集的 $.ajax 响应构建的数组的长度只有 1 个元素 - 尽管它递归了 20 次!如果没有调用刷新屏幕,数组构建得很好,但浏览器在我们递归时永远不会渲染 div!

最佳答案

setTimeout 不会返回您传入的函数返回的值。(它返回一个值,您可以通过将其传递给 clearTimeout 来停止超时)

因此,为了接收 myFunction 返回的值,只需将其包装在调用 setTimeout 的函数中即可。

setTimeout(function () {
var promise = myFunction(email);
// do something with promise...
}, 0);

关于javascript - 递归 $.ajax 函数并允许浏览器刷新/渲染更新的 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com