[英]yield is a reserved keyword error inside async function
我需要使用window.chrome.storage從chrome存儲中獲取用戶電子郵件,並檢查該電子郵件是否與從response.data.email登錄的電子郵件匹配。 如果匹配,則分派成功函數,否則返回錯誤。 但是,我收到一個錯誤消息,“ yield是保留關鍵字”。 我該如何運作?
這是我所做的
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;
}
在這里,我得到空數組。
我用諾言解決了這個問題。 如果必須在生成器內部進行異步操作,則可以采用以下方法之一。
使用yield call(fetchUserEmail)
調用函數。 在某種程度上,這是一種易讀且有組織的方法。 我不了解異步/等待,所以高度贊賞異步/等待中的答案。 以不同的方式解決問題會給出解決問題的不同思路,從而增加了各個領域的知識。
function fetchUserEmail() {
return new Promise((resolve, reject) => {
let userEmail = [];
window.chrome.storage.sync.get(['user_email'], result => {
userEmail.push(result.user_email);
resolve(userEmail);
});
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.