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)); }