来自c#class

时间:2017-10-13 17:45:21

标签: javascript asynchronous

我正在开发一个正在工作的项目,我正在使用CefSharp将c#连接到JS,因为我不允许使用外部服务器甚至本地主机服务器来托管php或其他脚本语言。我需要达到的目标是我在c#中有一个异步方法,它正在读取我需要完成工作的csv,我已经通过调试逐步完成了这些值。它返回一个Task在我的js文件中调用该方法来读取本地文件并返回一个要处理的字符串数组。我得到了一个未决的承诺,当我使用等待待定的承诺坐在那里并停止我的浏览器,我一直在互联网上寻求帮助,我还没有发现任何似乎有用的东西。我尽可能多地发布当前代码,我需要为此找到一个解决方案或至少一些好的指针,以便从js脚本中获取c#的值以便我可以继续前进。

//C# Code::
    public Task<string[]> GetCSV()
    {
        return GetCSVAsync(Encoding.UTF8, pB.GetDefaultPath(PathSelection.AppPathWeb) + "\\MatId\\Includes\\misc\\questions.csv");
    }
    public async Task<string[]> GetCSVAsync(Encoding encoding, string path)
    {
        string[] lines = new string[1];
        using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, DefaultBufferSize, DefaultOptions))
        {
            using (StreamReader reader = new StreamReader(stream, encoding))
            {
                string line;
                while ((line = await reader.ReadLineAsync()) != null)
                {
                    lines = AddLineToLines(lines, line);
                }
            }
        }
        return lines;
    }
    /// <summary>
    /// This code is opensourced.
    /// </summary>
    /// <param name="linesinarray">lines array</param>
    /// <param name="linetoadd">line to add to the lines array</param>
    /// <returns>lines array with new value in length</returns>
    private string[] AddLineToLines(string[] linesinarray, string linetoadd)
    {
        if (String.IsNullOrWhiteSpace(linesinarray[0]))
        {
            linesinarray[0] = linetoadd;
            return linesinarray;
        }
        else
        {
            string[] temp = new string[linesinarray.Length + 1];
            for (int i = 0; i < linesinarray.Length; i++)
            {
                temp[i] = linesinarray[i];
            }
            temp[temp.Length - 1] = linetoadd;
            return temp;
        }
    }
//JS Code::
//one attempt::
async function getCSVData() {
try {
    var xValue = jsDBConnection.getCSV().then(function (res) {
        console.log(res);
    });
} catch (e) {
    console.log(e.message);
}
}
//Attempt 2::
async function getCSVData() {
try {
    var xValue = await jsDBConnection.getCSV();
    return xValue;
} catch (e) {
    console.log(e.message);
}
}

所有这些调用c#并运行c#方法但是在返回时,promise是挂起的statused并且value是未定义的,然后jquery在infanite循环中运行,直到我暂停执行或终止进程它永远不会返回任何值。

我是异步编程的新手,我觉得我可以让它工作,但我不知道我哪里出错...我需要一些帮助,我要求fto帮我找到我做错了。

谢谢你, 杰西芬德

0 个答案:

没有答案