gpt4 book ai didi

javascript - 对象生成器函数没有执行它应该执行的操作并且没有返回任何结果。

转载 作者:搜寻专家 更新时间:2023-11-01 00:38:04 25 4
gpt4 key购买 nike

我正在尝试学习如何使用对象生成器并使用 yield 命令在我的 nodejs Controller 中执行一些同步操作。

我希望它首先执行 FOO 调用,然后在返回时执行 BAR 调用。

在这种情况下,我希望控制台显示

Hello FOO
Hello BAR

但我得到的只是

Result [object Generator]
Result [object Generator]

我什至没有在函数中获取 console.logs。

  var myResult = findUser1("FOO")
console.log("Result " + myResult )

myResult = findUser1("BAR")
console.log("Result " + myResult )

function* findUser1(UID) {
var user1 = yield setTimeout("Hello " + UID, 2000);
console.log("This should be shown AFTER user1 has a result");
console.log(user1);
return user1;
}

最佳答案

我相信您正在寻找promises ,而不是生成器函数。生成器函数返回 IterableIterator 对象。这些对象遵守 iterator protocol ,这意味着它们有一个 next() 方法,该方法返回一个带有 value 字段和 done bool 字段的对象。他们还遵守 iterable protocol ,这意味着它们有一个特殊的 @@iterator 方法,它返回一个迭代器对象(在这种情况下,它返回自己,因为它是它自己的迭代器)。

另一方面,Promises 表示一个目前还不存在但可能在未来某个时间存在的值。 ES6 也给了我们 async functions这简化了使用 await 关键字的 promise 。以下是您的代码使用异步函数时的样子:

async function findUser(id) {
const user = await new Promise((resolve, reject) => {
setTimeout(() => resolve("Hello " + id), 2000);
});
console.log("This should be shown AFTER user has a result");
console.log(user);
return user;
}

async function getUsers() {
const user1 = await findUser("FOO");
console.log("Result " + user1);
const user2 = await findUser("BAR");
console.log("Result " + user2);
}

getUsers();

如果不想使用async/await语法,下面是等价的:

function findUser(id) {
return new Promise((resolve, reject) => {
setTimeout(() => resolve("Hello " + id), 2000);
}).then((user) => {
console.log("This should be shown AFTER user has a result");
console.log(user);
return user;
});
}

findUser("FOO")
.then(user1 => console.log("Result " + user1))
.then(() => findUser("BAR"))
.then(user2 => console.log("Result " + user2));

关于javascript - 对象生成器函数没有执行它应该执行的操作并且没有返回任何结果。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44593309/

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