gpt4 book ai didi

javascript - yield is a reserved keyword inside async function 错误

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

我需要使用 window.chrome.storage 从 chrome 存储中获取用户电子邮件,并检查该电子邮件是否与来自 response.data.email 的用户登录电子邮件相匹配。如果匹配,则调度成功函数,否则出错。但是,我收到“yield is a reserved keyword”的错误。我该如何让它发挥作用?

这是我做的

function* setSessionAndLogin(response, headers, successCB, failureCB) {
if (response.data) {
const sessionValue = Array.from(headers.entries()).reduce(
(val, entry) => ({ ...val, [entry[0]]: entry[1] }),
{}
);

// const results = yield call(() => {})
window.chrome.storage.sync.get(['user_email'], result => {
if (response.data.email === result.user_email) {
yield put(successCB(response.data));
window.chrome.storage.sync.set(
{ user_token: btoa(JSON.stringify(sessionValue)) },
function() {}
);
} else {
yield put(failureCB('Email does not match'));
}
});

} else {
yield put(failureCB(response.errors[0]));
}
}

更新

我尝试过的解决方案

解决方案 1。

这里没有任何反应。我没有收到错误,但也收到了 console.log('result', result, result.user_email);不会在控制台中打印任何内容。

function* setSessionAndLogin(response, headers, successCB, failureCB) {
if (response.data) {
const sessionValue = Array.from(headers.entries()).reduce(
(val, entry) => ({ ...val, [entry[0]]: entry[1] }),
{}
);
window.chrome.storage.sync.get(['user_email'], function*(result) {
console.log('result', result, result.user_email);
if (result.user_email && response.data.email === result.user_email) {
yield put(successCB(response.data));
window.chrome.storage.sync.set(
{ user_token: btoa(JSON.stringify(sessionValue)) },
function() {}
);
} else {
yield put(failureCB('Email does not match'));
}
});
} else {
console.log('error');
yield put(failureCB(response.errors[0]));
}
}

解决方案 2

const results = yield call(fetchUserEmail)
async function fetchUserEmail() {
let userEmail = [];
const email = await window.chrome.storage.sync.get(['user_email'], result => {
userEmail.push(result.user_email);
console.log('userEmail', userEmail);
});

return userEmail;
}

这里我得到空数组。

最佳答案

我使用 promise 解决了这个问题。如果必须在生成器内部进行异步操作,您可以做的一种选择是以下方式。

使用 yield call(fetchUserEmail) 调用函数。在某种程度上,这是一种可读性和组织性强的方式。我不知道 async/await,所以非常感谢 async/await 中的答案。不同的解法给出了解决问题的不同思路,从而增加了对各个领域的知识。

function fetchUserEmail() {
return new Promise((resolve, reject) => {
let userEmail = [];
window.chrome.storage.sync.get(['user_email'], result => {
userEmail.push(result.user_email);
resolve(userEmail);
});
});
}

关于javascript - yield is a reserved keyword inside async function 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51301858/

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