是否存在AsyncMethod()的typescript版本。结果?
在C#中,我可以通过调用是否存在AsyncMethod()的typescript版本。结果?,typescript,Typescript,在C#中,我可以通过调用result属性来同步调用异步方法的结果 例如: var returnVal = AsyncMethod().Result; 在typescript中,它的等价物是什么?有一个与之类似的async/wait,但没有完全相同的东西。或者至少在浏览器或节点中运行时没有这样的东西。结果属性位于任务类上。TypeScript中的等价物是Promise,它是描述Promise对象的类型 TypeScript在运行时只是JS。JS运行时是非常异步的,因为JS设计为在没有多个线程的情
result
属性来同步调用异步方法的结果
例如:
var returnVal = AsyncMethod().Result;
在typescript中,它的等价物是什么?有一个与之类似的
async
/wait
,但没有完全相同的东西。或者至少在浏览器或节点中运行时没有这样的东西。结果
属性位于任务
类上。TypeScript中的等价物是Promise
,它是描述Promise对象的类型
TypeScript在运行时只是JS。JS运行时是非常异步的,因为JS设计为在没有多个线程的情况下工作。取而代之的是,为了确保任务之间的协作,必须产生一个线程。因此JS强烈支持非阻塞API
Result
隐藏的副作用是,如果还没有可用的结果,它会阻塞线程,直到结果到达。在JS世界中,这将阻塞唯一的线程,因此其他代码都无法执行,这很可能会阻止结果的到达(除非承诺是由某个系统调用直接返回的)
即使在CLR中,使用Result
也是一种既有技巧又有风险的伎俩。它经常导致死锁。如果要在任何地方使用async
,最好在CLR中随处使用它。让异步特性“波动”到最高级别(例如控制器方法或Main
)
在JS(以及TS)中,您别无选择,只能做正确的事情并保持一致的异步。这不太难。如果您有一个功能:
function f() {
const x = downloadSomething(); // x is a promise, I want the result
}
改为写:
async function f() {
const x = await downloadSomething();
}
现在
f()
还返回一个承诺,因此异步性“涟漪起来”。但这与您在C#中应该做的完全相同,如果可能的话。在顶部是否有某个点可以像console apps static Main()方法一样同步启动初始执行?不太可能。脚本在“顶层”运行,但它们也不应该在其中阻塞太长时间。