Beispiel #1
0
        public static void RegisterTask <TResult>(this IJSValueConverterService target)
        {
            if (target.CanConvert <Task <TResult> >())
            {
                return;
            }
            //register internal call back types
            target.RegisterFunctionConverter <TResult>();
            target.RegisterMethodConverter <TResult>();
            target.RegisterMethodConverter <string>();
            target.RegisterFunctionConverter <JSValue>();
            target.RegisterMethodConverter <JavaScriptValue>();
            target.RegisterMethodConverter <Action <TResult>, Action <JavaScriptValue> >();


            target.RegisterConverter <Task <TResult> >(
                (node, value) =>
            {
                //convert resolve, reject
                Action <Action <TResult>, Action <JavaScriptValue> > promiseBody = async(resolve, reject) =>
                {
                    try
                    {
                        var result = await value;
                        resolve(result);
                    }
                    catch (PromiseRejectedException ex)
                    {
                        reject(ex.Error);
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                };
                var jsValueService = node.GetService <IJSValueService>();
                var globalObject   = jsValueService.JSGlobalObject;
                var jsGlobalObject = new JSValue(node, globalObject);
                return(jsGlobalObject.CallFunction <Action <Action <TResult>, Action <JavaScriptValue> >, JavaScriptValue>("Promise", promiseBody, true));
            },
                (node, value) =>
            {
                //from a promise
                return(Task.Factory.FromAsync(

                           (callback, state) =>
                {
                    return BeginMethod <TResult>(value, node, callback, state);
                }
                           , EndMethod <TResult>, null
                           ));
            }, false
                );
        }
 public static Task <TResult> CallFunctionAsync <T1, T2, T3, T4, T5, T6, T7, TResult>(this JSValue value, string name, T1 para1, T2 para2, T3 para3, T4 para4, T5 para5, T6 para6, T7 para7)
 {
     value.ServiceNode.GetService <IJSValueConverterService>().RegisterTask <TResult>();
     return(value.CallFunction <T1, T2, T3, T4, T5, T6, T7, Task <TResult> >(name, para1, para2, para3, para4, para5, para6, para7));
 }
 public static Task CallMethodAsync <T1, T2, T3, T4, T5, T6, T7>(this JSValue value, string name, T1 para1, T2 para2, T3 para3, T4 para4, T5 para5, T6 para6, T7 para7)
 {
     return(value.CallFunction <T1, T2, T3, T4, T5, T6, T7, Task>(name, para1, para2, para3, para4, para5, para6, para7));
 }
 public static Task CallMethodAsync(this JSValue value, string name)
 {
     return(value.CallFunction <Task>(name));
 }
 public static Task CallMethodAsync <T1, T2, T3, T4>(this JSValue value, string name, T1 para1, T2 para2, T3 para3, T4 para4)
 {
     return(value.CallFunction <T1, T2, T3, T4, Task>(name, para1, para2, para3, para4));
 }
 public static Task <TResult> CallFunctionAsync <T1, T2, TResult>(this JSValue value, string name, T1 para1, T2 para2)
 {
     value.ServiceNode.GetService <IJSValueConverterService>().RegisterTask <TResult>();
     return(value.CallFunction <T1, T2, Task <TResult> >(name, para1, para2));
 }
 public static Task CallMethodAsync <T1>(this JSValue value, string name, T1 para1)
 {
     return(value.CallFunction <T1, Task>(name, para1));
 }