从不带回调的异步javascript方法获取结果

从不带回调的异步javascript方法获取结果,javascript,c#,asynchronous,Javascript,C#,Asynchronous,我有一个javascript函数,它使用CefSharp.ChroniumBrowser(WinForms)。 我将“jsObject”注册为浏览器的脚本对象:browser.RegisterJsObject(new jsObject())。 C#代码: 下面的js代码调用C#方法,该方法异步检查服务器是否已连接,并使用结果执行回调 function isServerConnected(callback) { window.jsObject.isServerConnected(functi

我有一个javascript函数,它使用CefSharp.ChroniumBrowser(WinForms)。 我将“jsObject”注册为浏览器的脚本对象:browser.RegisterJsObject(new jsObject())。 C#代码:

下面的js代码调用C#方法,该方法异步检查服务器是否已连接,并使用结果执行回调

function isServerConnected(callback) {
   window.jsObject.isServerConnected(function (connected) {
      callback(connected);
   });
}
为了得到结果,我应该写:

isServerConnected(function(result) {
   if (result) {
      // server is connected. do something
   } else {
      // show error
   }
});
我希望通过以下方式获得结果:

var result = isServerConnected();
if (result){
  ...
} else {
 ...
}

有可能做到这一点吗?也许承诺会有所帮助,但我如何在结束调用中不使用回调就获得结果:var result=isServerConnected()

JS代码在使用异步调用时不会同步执行。JS在同步和异步调用上非常透明。如果您不喜欢回调,在ES6中引入了
promissions
,那么您有更好的方法来处理异步调用。看看下面的代码

var promise = new Promise(function(resolve, reject) {
   window.jsObject.isServerConnected(function(connected) {
      resolve(connected);
   });
});
promise.then(function(result) {
   if(result) {
      // server is connected. do something
   } else {
      // show error
   }
}).catch(function(error) {
   // catch all errors here
});

许多浏览器尚未添加对
承诺的支持。检查浏览器兼容性。在ES7中,我们有
async/await
,它将按照您的预期工作。同样,许多浏览器还没有添加它。查看有关
async/await

的更多信息这感觉像是一个-为什么您希望它是一个同步调用-在JS中通常异步/回调是一种方式。承诺只是稍微隐藏了一点回调-它仍然是一个异步调用。如果最新版本的Cef Chronium浏览器支持异步/等待,我将尝试使用它。谢谢你的建议!仅供参考,我删除了代码中的箭头函数,因为某些浏览器尚不支持它。
var promise = new Promise(function(resolve, reject) {
   window.jsObject.isServerConnected(function(connected) {
      resolve(connected);
   });
});
promise.then(function(result) {
   if(result) {
      // server is connected. do something
   } else {
      // show error
   }
}).catch(function(error) {
   // catch all errors here
});