Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否存在AsyncMethod()的typescript版本。结果?_Typescript - Fatal编程技术网

是否存在AsyncMethod()的typescript版本。结果?

是否存在AsyncMethod()的typescript版本。结果?,typescript,Typescript,在C#中,我可以通过调用result属性来同步调用异步方法的结果 例如: var returnVal = AsyncMethod().Result; 在typescript中,它的等价物是什么?有一个与之类似的async/wait,但没有完全相同的东西。或者至少在浏览器或节点中运行时没有这样的东西。结果属性位于任务类上。TypeScript中的等价物是Promise,它是描述Promise对象的类型 TypeScript在运行时只是JS。JS运行时是非常异步的,因为JS设计为在没有多个线程的情

在C#中,我可以通过调用
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()方法一样同步启动初始执行?不太可能。脚本在“顶层”运行,但它们也不应该在其中阻塞太长时间。