gpt4 book ai didi

javascript - 如何等待回调

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

这个问题在这里已经有了答案:





How to return the response from an asynchronous call

(43 个回答)


去年关闭。




我需要阅读一个文件夹以获取名称并从中获取更大的日期。
文件夹:
enter image description here
读取文件夹、获取文件名并获取更大日期的代码(今天除外):

  async function getLastDate() {
try {
let filesNames;
let today = getDate();
let returnValue;


fs.readdir(path.join(rutaBase, 'sessionsOffline'), ((err, files) => {
if (err) {
console.log('error leyendo directorio');
return { ok: false, msg: 'Error leyendo directorio en getLastDate', data: null };
}

//Obtener las fechas de los archivos(despues del ultimo '_')
filesNames = files.map(file => {
if (file.includes('_')) {
return file.substr(file.lastIndexOf('_') + 1);
}
});

//Remover archivos sin fecha
let fileNamesFiltrados = filesNames.filter((fileName) => {
return fileName != null;
});

//Remover el archivo de hoy del arreglo
filesNames = fileNamesFiltrados;
let arrDatesWithOutToday = [];
filesNames.forEach(fileName => {
if (fileName != today) {
arrDatesWithOutToday.push(fileName);
}
});

//Convertir arreglo a array de tipo Date
let arrDatesWithOutToday2 = arrDatesWithOutToday.map(val => {
let [year, month, day] = val.split('-');
return new Date(year, month - 1, day);
});

//Obtener la fecha mayor
let maxDate = Math.max.apply(null, arrDatesWithOutToday2);

//Formater la fecha a YYYY-MM-DD
maxDate = new Date(maxDate).toISOString().split('T')[0];
returnValue = maxDate;
return { ok: true, msg: null, data: maxDate };
}));
} catch (error) {
console.log('probando error: ', error);
return { ok: false, msg: 'Error obtenieno fecha de la ultima sesion', data: null };


}
}
我从另一个函数调用 getLastDate(第 1936 行):
enter image description here
但在 1937(console.log('date getBalance: ', date)) 我得到 'date getBalance: undefined'
然后调试我的代码我发现 fs.readdir 中的回调是一个异步函数
有人可以帮助我吗?我需要在 getBalance 函数中获取 maxDate(照片的第 1937 行)。
先感谢您

最佳答案

首先,line 1936实际上是一个 if 语句,所以你必须确保它属于 getLastDate()陈述。
如果是这样,您可以将返回值分配给 date三种方式。
使用 promise getLastDate功能如:

function getLastDate() {
// Your code
return new Promise((resolve, reject) => {
try {
fs.readdir(path.join(rutaBase, 'sessionsOffline'), ((err, files) => {
if (err) {
reject(err);
return;
}
// Your code
resolve({ ok: true, msg: null, data: maxDate });
});
} catch (e) {
reject(e);
}
});
}
当你调用它时:
var date;
if (today) {
date = getDate();
} else {
getLastDate().then(res => {
date = res;
});
}
或者您可以使用 async/await当你还有 promise :
async function getBalance() {
var date;
if (today) {
date = getDate();
} else {
date = await getLastDate();
}
}

或使用回调:
function getLastDate(callback) {
// Your code
fs.readdir(path.join(rutaBase, 'sessionsOffline'), ((err, files) => {
if (err) {
throw err;
}
// Your code
callback({ ok: true, msg: null, data: maxDate });
});
}

var date;
if (today) {
date = getDate();
} else {
getLastDate(res => {
date = res;
});
}
它们只是概念,所以请忽略我的错字和我省略的错误检查部分。

关于javascript - 如何等待回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65710863/

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