2015-09-04 85 views
24

我对c#的异步/等待非常熟悉,并且使用打字稿一年左右,任何人都可以给一个简单的例子解释它如何在打字稿上工作? 在此先感谢,期待着找到一些帮助,实现了相同的异步/等待,简单示例(typescript)


UPDATE
这将是非常有益的,如果示例包括角/ jQuery的承诺,因为它会给实际执行的清晰视图

+0

请参阅提案:TypeScript上的异步函数https://github.com/Microsoft/TypeScript/issues/1664。另外https://smellegantcode.wordpress.com/2015/02/01/typescript-1-5-async-functions/和http://www.dotnetcurry.com/javascript/1131/ecmascript6-async-using-generators-承诺 –

+2

该路线图显示async/await为2.0:https://github.com/Microsoft/TypeScript/wiki/Roadmap(截至[7月23日](https://github.com/Microsoft/TypeScript/wiki/Roadmap/ aa5e66fabe0d50ef53e6b05b3d1906a3eb40a35b)) –

+0

MatijaGrcic和@JonSkeet双向链接,感谢评论,我已经看过这些文档,但真的很期待一个简单的实例,所以我可以将它与angularjs promise的集成 –

回答

28

的关键是使用ES6 Promise或东西,实现了lib.d.tsRead more)发现PromiseLikePromiseConstructorLike接口。一个jQuery的承诺does not implement这些接口,所以它不会与此工作。

下面是使用ES6承诺一个简单的例子:

function getStringFromWebServerAsync(url: string) { 
    return new Promise<string>((resolve, reject) => { 
     // note: could be written `$.get(url).done(resolve).fail(reject);`, 
     //  but I expanded it out for clarity 
     $.get(url).done((data) => { 
      resolve(data); 
     }).fail((err) => { 
      reject(err); 
     }); 
    }); 
} 

async function asyncExample() { 
    try { 
     let data = await getStringFromWebServerAsync("http://localhost/GetAString"); 
     console.log(data); 
    } 
    catch (err) { 
     console.log(err); 
    } 
} 

asyncExample(); 

注意,含await语句中的任何代码需要一个async函数中,所以我已经在一个包中的代码。

12

请注意,您需要在Typescript 1.7中使用异步/等待来定位ES6。具有较低的版本中,Visual Studio中输出

TS1308 'await' expression is only allowed within an async function. 

TS1311 Async functions are only available when targeting ECMAScript 6 and higher. 

有关详细信息,请参阅例如http://blogs.msdn.com/b/typescript/archive/2015/11/03/what-about-async-await.aspx

+6

这是很好的信息,但并未真正回答问题。也许它应该是一个评论,当你有足够的声望。 –

+1

我很了解它,但正如你所说我缺乏声誉。对不起。 – Zartag