gpt4 book ai didi

javascript - promise 搞砸了?

转载 作者:行者123 更新时间:2023-12-03 00:52:31 26 4
gpt4 key购买 nike

过去几天这个问题一直让我抓狂。我远不是 Javascript 专家,也许解决方案是显而易见的,但我没有看到它。

我基本上尝试做的是:

  1. 并行下载项目,每个请求都是针对给定的具有不同属性的项目类型(type1、type2)。
  2. 下载后,执行回调函数来对数据进行后处理(这是具有不同参数和测试的相同函数根据项目类型进行不同的处理)
  3. 保存项目

如果我下载 1 种项目类型,则一切正常。但是,如果我下载 2 种类型,那么在第一个回调执行中的处理循环中的某个时刻,恰好在第二次执行第二种类型的回调时,那么对类型的测试将表明它是第二种类型,而项目属于第一类...

以下是代码摘录:

downloadType1();
downloadType2();

// 2nd argument of download() is the callback function
// 3rd argument is the callback function parameters
function downloadType1() {
// Some stuff here
let callbackParameters = ['type1', 'directory1'];
download('url', headacheCallback, callbackParameters);
}

function downloadType2() {
// Some the stuff here
let callbackParameters = ['type2', 'directory2'];
download('url', headacheCallback, callbackParameters);
}

async function download(url, callbackBeforeSave, callbackParameters) {
// Some stuff here
let response;
try {
response = await rp(url);
} catch (e) {
console.log("Error downloading data");
}

// Call callbacks before saving the data
if(callbackBeforeSave) {
let updatedResponse;

if (callbackParameters) {
updatedResponse = await callbackBeforeSave(response, ...callbackParameters);
} else {
updatedResponse = await callbackBeforeSave(response);
}

response = updatedResponse;
}

// Some stuff here with the post-processed data
}

async function headacheCallback(data, type, directory) {
for (item of data) {
// Some stuff here, include async/await calls (mostly to download and save files)

console.log(type, item.propertyToUpdate, item.child.propertyToUpdate);
// This is were my issue is.
// The test will success although I'm still the 'type1' loop. I know because the console.log above shows the item is indeed of type 'type1'
if (type === 'type2') {
item.child.propertyToUpdate = newUrl; // Will eventually fail because 'type1' items don't have a .child.propertyToUpdate property
} else {
item.propertyToUpdate = newUrl;
}
}
}

在某个时刻,console.log 的输出将 : type2 <valueOfTheProperty> undefined应该是type2 undefined <valueOfTheProperty> ...

快速思考:在回调的第一个版本中,我使用了 arguments全局变量与 function.apply(...) 结合使用。这很糟糕,正是因为 arguments是全局的,因此在第二次调用后发生了变化......

但现在我在代码中没有看到任何可以解释原因的全局内容 type正在改变。

任何帮助将不胜感激。

谢谢!

最佳答案

I don't see anything global in my code that could explain why type is changing.

改变的不是类型。您的问题是 item ,它是 involuntary global :

for (item of data) {
// ^^^^

把它变成

for (const item of data) {
// ^^^^

并且始终启用严格模式!

关于javascript - promise 搞砸了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52988909/

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