更新:添加了Deck.NET示例https://deck.net/d6ad74332cfdee1293a535daf5afc144
我使用的是ImmortalDB,它返回承诺:https://github.com/gruns/ImmortalDB#get,如下所示:
public class OzCrGbSearchParameterDataManagerData
{
private const string KEY_PREFIX = "OzCrGbSearchParameterDataManagerData"; //Avoid potential key name collisions
private const int UNSET_ID = -111; //This is the same as OzCpPlatformConstants.UNSET_ID
private const string IMMORTAL_DATABASE_NAME = "dbSearchParameterData";
public OzCrGbSearchParameterDataManagerData()
{
Console.WriteLine("OzCrGbSearchParameterDataManagerData Constructor");
}
/// <summary>
/// Holds the session for Departing city selected parameter
/// </summary>
public int ShipId
{
//get => Convert.ToInt32(JavaScriptGetMethod("ShipId", Convert.ToString(UNSET_ID)));
get
{
var blah = JavaScriptGetMethod("ShipId", Convert.ToString(UNSET_ID));
Console.WriteLine("Blah");
Console.WriteLine(blah);
Console.WriteLine("/Blah");
return -1;
}
set => JavaScriptSetMethod("ShipId", Convert.ToString(value));
}
private string JavaScriptGetMethod(string aKeyName, string aKeyValueDefault, string aKeyPrefix = KEY_PREFIX)
{
return Script.Write<string>("ImmortalDB.ImmortalDB.get('aKeyName', 'aKeyValueDefault')");
}
private void JavaScriptSetMethod(string aKeyName, string aKeyValue, string aKeyPrefix = KEY_PREFIX)
{
Script.Write("ImmortalDB.ImmortalDB.set('aKeyPrefix.aKeyName', 'aKeyValue');");
}
}现在,我最终看到的JS如下:

因此,我显然得到了一个承诺(正如预期的那样),但我无法确定如何使用返回类型Task和/或它正在构建的实际JS组合来更改JavaScriptGetMethod,以便返回承诺的结果。
同样,我的JavaScriptSetMethod()也不能工作。
任何指点都很感激。
发布于 2020-02-04 15:38:43
我不熟悉Bridge.NET,也不熟悉它的Script.Write<T>方法,但是我希望下面的内容至少能为您指明正确的方向,以防这仍然是一个现实。
把一个承诺想象成你从某个地方订购的包裹,送货人就在你手里。
你一直拿着盒子,但它不是你感兴趣的盒子本身,你想要它(盒子)里面的任何东西。你要怎么做才能拿到这件东西?当然,打开盒子(打开它)。
您可以通过展开--承诺的承诺--等待-ing,或者提供处理程序。下面的两个函数展示了这些技术(全Deck.NET样品)
private string JavaScriptGetMethodUnwrapPromise1(string aKeyName, string aKeyValueDefault, string aKeyPrefix = KEY_PREFIX)
{
return Script.Write<string>("(async () => { try { const res = await ImmortalDB.ImmortalDB.get('aKeyName', 'aKeyValueDefault'); return JSON.stringify(res); } catch (err) { return JSON.stringify(err); } })();");
}上面的代码将对ImmortalDB.ImmortalDB.get的调用封装在一个自动执行的异步函数中,因为等待关键字只能在异步函数中使用。然后它会收缩返回,因为我们想要一个字符串,而不是对象。
private string JavaScriptGetMethodUnwrapPromise2(string aKeyName, string aKeyValueDefault, string aKeyPrefix = KEY_PREFIX) {
return Script.Write<string>("(() => { ImmortalDB.ImmortalDB.get('aKeyName', 'aKeyValueDefault').then((res) => { return JSON.stringify(res); }).catch((err) => { return JSON.stringify(err); }); })();");
}在这里,我们实现了同样的目标,但是没有异步包装器,因为我们不是等待-ing的承诺,而是将处理程序附加到它。
https://stackoverflow.com/questions/58319614
复制相似问题