I'm trying to use edge.js for using a node.js module within C#.
I can access a property of the module, but not a method.
using System;
using System.Threading.Tasks;
using EdgeJs;
class Program
{
static void Main(string[] args)
{
Start().Wait();
}
public static async Task Start()
{
var func = Edge.Func(@"return require('../require.js')");
var invoke = func.Invoke(new { });
var require = (dynamic)invoke.Result;
Console.WriteLine(require.answer1); // answer 1
var deleg = require.answer2;
Console.WriteLine(deleg);
var task = deleg.Invoke(1);
Console.WriteLine(task);
// var result = await task.Run(); // error
// Console.WriteLine(result);
}
}
require.js
module.exports = function (data, callback) {
var module = require('./module');
var result = module;
callback(null, result);
};
module.js
exports.answer1 = "answer 1";
exports.answer2 = function () {
return "answer 2";
};
Is there a way I can call the function in node.js from C# and access "answer 2"?
Here the error:
answer 1
System.Func`2[System.Object,System.Threading.Tasks.Task`1[System.Object]]
System.Threading.Tasks.Task`1[System.Object]
Unhandled Exception: System.AggregateException: One or more errors occurred. ---
> Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: No overload for method
'Run' takes '0' arguments
at CallSite.Target(Closure , CallSite , Object )
at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T
0 arg0)
at Program.<Start>d__d.MoveNext() in c:\Users\admin\Documents\Visual Studio 2
013\Projects\snippets\snippets\Program.cs:line 26
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceled
Exceptions)
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationTo
ken cancellationToken)
at System.Threading.Tasks.Task.Wait()
at Program.Main(String[] args) in c:\Users\admin\Documents\Visual Studio 2013
\Projects\snippets\snippets\Program.cs:line 10
Press any key to continue . . .
Console.WriteLine(deleg)produce?2[System.Object,System.Threading.Tasks.Task1[System.Object]]var result = await task. No need to call the run method on the task, the await keyword should invoke the task if it hasn't already been completed.