gpt4 book ai didi

javascript - 保留 $http.get 异步结果处理的变量值

转载 作者:行者123 更新时间:2023-12-01 03:28:27 27 4
gpt4 key购买 nike

让我们考虑一下我们有一个函数,在某些事件上调用(假设 - scroll 事件)。此函数将更多项目加载到某个列表中。

假设该函数的逻辑设计如下:

function() {
oldSize = list.length;

// add new items (prepare them in advance)
for (i = 0; i < PAGE_SIZE; i++) list.push({});

$http.get("/next/page/" + oldSize).then(function() {
// here I want operate with oldSize value which is actual on moment of
// the $http.get invocation:
for (i = 0; i < PAGE_SIZE;i++) {
// do something with
list[oldSize + i] = ... ;
}
}
}

问题是整个函数几乎可以同时调用多次,这会导致 .then(function() { 使用不正确的 oldSize 值进行操作 code> 变量 - 它成为最后一个 list.length 的值,而我需要将其保留为调用时的状态。

例如,如果此事件监听器几乎同时被调用两次,则它将是:

  1. oldSize == 5,列表增加了 10 个(例如)元素。但在 $http.get(...).then() 内部,我需要使用值 oldSize == 5

  2. 第二次调用:oldSize == 15(因为我们在第一次调用中将列表增加了 10 个元素)。因此,在 this 特定的 $http.get(...).then() 中,我想要 oldSize == 15

我希望这是清楚的。请不要建议我改变我的逻辑。我只想知道如何保存异步函数推迟结果的变量值(在我的例子中是 $http.get(...).then(...))。谢谢。

最佳答案

假设您无法在此函数内定义 oldSize,因为您在其他地方需要它。

function() {
oldSize = list.length;

// add new items (prepare them in advance)
for (i = 0; i < PAGE_SIZE; i++) list.push({});


var currentOldSize = oldSize;

$http.get("/next/page/" + oldSize).then(function() {
// here I want operate with oldSize value which is actual on moment of
// the $http.get invocation:
for (i = 0; i < PAGE_SIZE;i++) {
// do something with
list[currentOldSize + i] = ... ;
}
}
}

关于javascript - 保留 $http.get 异步结果处理的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44657090/

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