gpt4 book ai didi

javascript - NodeJS 函数返回未定义。

转载 作者:行者123 更新时间:2023-12-01 02:06:45 24 4
gpt4 key购买 nike

我试图构建一个将附加到文件的通用函数。根据结果​​,该函数将返回状态 200 或 500。

初始设置应调用该函数并返回任一状态。调用该方法后,我收到一个空对象。

该函数是类的一部分,并且已添加所有必需的导入。我确实尝试返回 fs.appendFile 但我设法收到相同的结果。

/**
* A functio which writes a data into a file
* @param {[string]} fileName A file location with file name string
* @param {[string]} msg A data to be saved
* @return {[object]} A response object with response code and msg.
*/
static toFile(fileName, msg) {
fs.appendFile(fileName, msg, function(err) {
let responseObject = {};
if (err) {
responseObject.status = 500;
responseObject.msg = 'Error occured please view ' + fileName;
return responseObject;
}
responseObject.status = 200;
responseObject.msg = 'Success, file has been created ' + fileName;

return responseObject;
});
}

最佳答案

这里的问题是 fs.appendFile 的方式功能有效。该函数是异步的......所以基本上你可以看到你的函数如下:

static toFile(fileName, msg) {
fs.appendFile(fileName, msg, function(err) {
let responseObject = {};
if (err) {
responseObject.status = 500;
responseObject.msg = 'Error occured please view ' + fileName;
return responseObject;
}
responseObject.status = 200;
responseObject.msg = 'Success, file has been created ' + fileName;

return responseObject; //this wont be assigned to anything.
});
return undefined; //this is why you get undefined
}

您可以使用两种方法:

Callback approach:当您收到响应 obj 时,这将触发您的 cb 函数。

static toFile(fileName, msg, cb) { //cb is a function
fs.appendFile(fileName, msg, function(err) {
let responseObject = {};
if (err) {
responseObject.status = 500;
responseObject.msg = 'Error occured please view ' + fileName;
return responseObject;
}
responseObject.status = 200;
responseObject.msg = 'Success, file has been created ' + fileName;

cb(responseObject); //instead of returning, call your cb function and use it as you please.
});
}

Promise approach

这将在解析时返回响应对象,当然你必须处理 toFile 之外的 promise 功能。

   static toFile(fileName, msg) { //cb is a function
return new Promise((resolve, reject) => {
fs.appendFile(fileName, msg, function(err) {
let responseObject = {};
if (err) {
responseObject.status = 500;
responseObject.msg = 'Error occured please view ' + fileName;
reject(responseObject)
}
responseObject.status = 200;
responseObject.msg = 'Success, file has been created ' + fileName;

resolve(responseObject)
});
}
}

关于javascript - NodeJS 函数返回未定义。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50045529/

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