gpt4 book ai didi

javascript - 请求内递归函数调用的异步问题

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

我现在正在寻找一个文档路径,其名称指定为参数。在 fetch_doc_path 中,我发出了两个 get 请求来获取一个包含所有文件条目的 JSON 文件,然后递归调用 traverse_doc 以查找与用户输入的名称匹配的文件路径。现在的问题是,当我检查 fetch_doc_path 中的 traverse_doc_obj.doc_list.length 时,它始终为 0,因为 traverse_doc 尚未完成。我可以修改代码以便在所有递归调用完成后可以执行检查长度吗?即让get请求和递归都同步?

最小的示例如下,我想在所有递归完成后检查 traverse_doc_obj 中的列表:

function fetch_doc_path(assistant){
let doc_name_input = assistant.getArgument('DocName');
...
get_request_handler(assistant, repo_url, function(callback){
...
get_request_handler(assistant, target_repo_url, function(callback){
traverse_doc(assistant, callback, traverse_doc_obj);
});
});
// Check the list from traverse_doc_obj
}

function traverse_doc(assistant, input_callback, traverse_doc_obj){
let input_json = JSON.parse(input_callback);
for (let i = 0; i < Object.keys(input_json['data']).length; i++){
if (the folder has children){
...
get_request_handler(assistant, sub_dir_url, function(callback){
// call it self for traversing.
});
}else{
// push path to a list in traverse_doc_obj if name matches doc_name_input
}
}
}
}

最佳答案

在处理回调时,您无法真正同步执行操作。我没有一个简单的答案(因为您的代码并不简单),但我建议如下:

  • 学习 promise 。如果您使用的是 Node.js 版本 6 及更高版本,它们是内置的。它们并不完全同步,但您可以这样对待它们。如果您使用的是版本 8,它们是通往 async/await

  • 的门户
  • 您编写的代码需要一种方法在所有回调完成后执行某些操作。对于您的模式,这是通过传递回调函数并调用该函数作为链中的最后一层来完成的。

关于javascript - 请求内递归函数调用的异步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45991265/

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