Lud*_*wik 5 javascript generator promise typescript
让我们看一下promisejs.org的示例async函数,它允许我们使用生成器来等待promise:
function async(makeGenerator){
return function () {
var generator = makeGenerator.apply(this, arguments);
function handle(result){
// result => { done: [Boolean], value: [Object] }
if (result.done) return Promise.resolve(result.value);
return Promise.resolve(result.value).then(function (res){
return handle(generator.next(res));
}, function (err){
return handle(generator.throw(err));
});
}
try {
return handle(generator.next());
} catch (ex) {
return Promise.reject(ex);
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
var login = async(function* (username, password, session) {
var user = yield getUser(username);
var hash = yield crypto.hashAsync(password + user.salt);
if (user.hash !== hash) {
throw new Error('Incorrect password');
}
session.setUser(user);
});
Run Code Online (Sandbox Code Playgroud)
我的问题:如何在TypeScript中对这两个函数进行注释,以保证类型安全?
我试过的:
我知道async函数返回一个Promise<T>,但是我不确定T应该是什么。我猜这应该取决于传入的生成器,但是生成器有什么类型?有GeneratorFunctionnodejs或bluebird的类型(不记得是哪一种),但是那不是通用的,所以我无法async(makeGenerator: GeneratorFunction<T>): Promise<T>按照自己的意愿去做。
| 归档时间: |
|
| 查看次数: |
1474 次 |
| 最近记录: |