首页 > 解决方案 > 为什么函数返回未定义?

问题描述

我想访问 timestamp.log 文件并获取与索引名称对应的最后一个时间戳。

例如:如果我将 logIndex =index-7.11.1-frontend1-endpoint-2021.02.24作为参数传递给它,fetchIndexTimeStamp它应该返回与此 logIndex 对应的最后一个时间戳,即第三个最后一行时间戳 ( 2021-02-24T00:24:43.659Z)

timestamp.log 如下所示:

index-7.11.1-frontend2-endpoint-2021.02.24::2021-02-24T00:24:31.187Z
index-7.10.1-backend2-recommendation-2021.02.24::2021-02-24T00:23:36.793Z
index-7.10.1-backend1-config-mgmt-2021.02.24::2021-02-24T00:23:41.523Z
index-7.10.1-backend1-recommendation-2021.02.24::2021-02-24T00:23:41.523Z
index-7.10.1-backend2-migration-2021.02.24::2021-02-24T00:23:36.793Z
index-7.10.1-backend1-migration-2021.02.24::2021-02-24T00:23:41.523Z
index-7.11.1-frontend1-endpoint-2021.02.24::2021-02-24T00:24:29.659Z
index-7.11.1-frontend2-merlinui-2021.02.24::2021-02-24T00:03:08.988Z
index-7.11.1-frontend1-merlinui-2021.02.24::2021-02-24T00:02:07.705Z
index-7.11.1-frontend2-endpoint-2021.02.24::2021-02-24T00:24:31.187Z
index-7.10.1-backend2-recommendation-2021.02.24::2021-02-24T00:23:36.793Z
index-7.10.1-backend1-recommendation-2021.02.24::2021-02-24T00:23:41.523Z
index-7.10.1-backend1-config-mgmt-2021.02.24::2021-02-24T00:23:41.523Z
index-7.10.1-backend2-migration-2021.02.24::2021-02-24T00:23:36.793Z
index-7.10.1-backend1-migration-2021.02.24::2021-02-24T00:23:41.523Z
index-7.11.1-frontend1-endpoint-2021.02.24::2021-02-24T00:24:43.659Z
index-7.11.1-frontend1-merlinui-2021.02.24::2021-02-24T00:02:07.705Z
index-7.11.1-frontend2-merlinui-2021.02.24::2021-02-24T00:03:08.988Z

这是我获取时间戳的函数,但它返回未定义:

const fs = require('fs')
module.exports = {
    fetchIndexTimeStamp: (logIndex) => {
        const dir = './logs/timestamp.log'
        fs.access(`${dir}`, fs.R_OK, (err) => {
            if(err) {
                console.log(err);
                if(err.code === 'ENOENT') {
                     // file does not exists
                    const writableStream = fs.createWriteStream(`${dir}`);
                    console.log('File does not exists !!')
                    const message = `${logIndex}::default`
                    writableStream.write(message + '\r\n')
                }
            }
            else {
                // file exists 
                let ans = undefined;
                const file = fs.readFileSync(`${dir}`, 'utf-8').split(/\r?\n/);
                file.forEach((line) => {
                    let temp = line.split("::");
                    if(temp[0].toString() === logIndex) {
                        ans = temp[1];
                    }
                })
                // console.log('data ', ans); // this is printing correct output
                return ans;
            }
        })
    }
}

const tmpstp = fetchIndexTimeStamp(logIndex); // gives undefined ??

请让我知道为什么函数返回未定义?

标签: javascriptnode.jsasynchronous

解决方案


推荐阅读