gpt4 book ai didi

javascript - 如何在 typescript 中注释生成器函数

转载 作者:搜寻专家 更新时间:2023-10-30 20:53:29 25 4
gpt4 key购买 nike

让我们看例子async来自 promisejs.org 的函数,这允许我们使用生成器等待 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);
}
}
}

示例用法:

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);
});

我的问题:为了保持类型安全,应该如何在 TypeScript 中注释这两个函数?

我尝试过的:我知道 async函数返回 Promise<T> , 但我不确定是什么 T应该。我想这应该取决于传入的生成器,但是生成器有什么类型?有 GeneratorFunction在 nodejs 或 bluebird 的类型中(不记得是哪个),但那个不是通用的所以我不能做 async(makeGenerator: GeneratorFunction<T>): Promise<T>正如我所愿。

最佳答案

but I'm not sure what T should be

在你的情况下 login什么都不返回给Promise<void> .

关于javascript - 如何在 typescript 中注释生成器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39034835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com