gpt4 book ai didi

javascript - 带 Promise 的函数生成器

转载 作者:行者123 更新时间:2023-12-04 08:49:47 25 4
gpt4 key购买 nike

我要写异步 功能:

const myAsyncFunction = async(function* (promise) {
const data = yield promise;
console.log(data);
});

myAsyncFunction(Promise.resolve("Hello world")); // console: ‘Hello world!’`
结果应该是 - 控制台: “世界你好!”
我认为这将是一个正确的实现:
function async(cb) {
return cb().next();
}

const myAsyncFunction = async(function* (promise) {
const data = yield promise;
console.log(data);
});

myAsyncFunction(Promise.resolve("Hello world")); // console: ‘Hello world!’`
但我有一个类型错误:
类型错误:myAsyncFunction 不是函数
我找到了一些例子 generator forwards with the results of any promises it has yielded
但我不明白它是如何工作的,我的错误在哪里:
function async(cb) {
return function () {
let generator = cb.apply(this, arguments);

function handle(result) {
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));
}
);
}
};
}
请解释一下我做错了什么?

最佳答案

我假设您的代码 (mwe) 如下所示:

const myAsyncFunction = async(function* (promise) {
const data = yield promise;
console.log(data);
});

myAsyncFunction(Promise.resolve("Hello world")); // console: ‘Hello world!’`

function async(cb) {
return cb().next();
}


当你运行它时,你确实得到了错误 TypeError: myAsyncFunction is not a function .但是,当您调整使用文章中的复制功能时:
const myAsyncFunction = async(function* (promise) {
const data = yield promise;
console.log(data);
});

myAsyncFunction(Promise.resolve("Hello world")); // console: ‘Hello world!’`

function async(cb) {
return function () {
let generator = cb.apply(this, arguments);

function handle(result) {
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));
}
);
}
};
}

你没有得到错误。这是因为文章中的代码在 async 定义中返回了一个函数,因此您可以使用该行中给出的参数来应用它
myAsyncFunction(Promise.resolve("Hello world")); // console: ‘Hello world!’`
在您的原始定义中, async定义不返回函数,因此上面的调用失败。
从您的下一篇文章开始,并试图了解您想要什么,以下内容将使用生成器函数中的控制台行打印字符串,但仍然不太确定您要实现的目标是什么:
function async(gen) {
return function (cb) {
g = gen.apply(this, [cb])
g.next()
cb.then(res => {
g.next(res);
});
}
}

关于javascript - 带 Promise 的函数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64151741/

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