Я использую редукционную сагу для своего магазина и https://github.com/chirag04/react-native-in-app-utils для загрузки своих продуктов для покупок в Apple.Как использовать действие yield put() в обратном вызове для сохранения его данных?
Формат для извлечения является:
var products = [
'com.xyz.abc',
];
InAppUtils.loadProducts(products, (error, products) => {
//update store here.
});
я не могу использовать обычный выход put(actions.saveMethod(data))
, поскольку он не является генератором.
У меня есть этот код в подписной саге, которая выглядит следующим образом:
export function* iosSubscriptionSaga() {
let resp = yield validateUserReceipt();
let respProducts = call(InAppUtils.loadProducts, products);
put(IapActions.loadSubscriptionProduct(products[0])) //doesn't work
}
Как сохранить продукты в мой магазин?
EDIT: Я смог заставить его работать, обернув его в обещание.
export function* iosSubscriptionSaga() {
// validate subscription receipt here
let productsResp = yield loadProducts();
if (productsResp) {
yield put(IapActions.loadSubscriptionProduct(productsResp[0]));
yield put(IapActions.loadSubscriptionsSuccess());
} else {
yield put(IapActions.loadSubscriptionsFailure('Error: Failed to load products from iTunes Connect.'))
}
}
function loadProducts() {
return new Promise((resolve, reject) => {
InAppUtils.loadProducts(products, (error, products) => {
if (!error) {
resolve(products);
} else reject(error);
});
});
}
Я не уверен, что я все же исправляю ошибки.
Что ошибка? – Andreyco
Нет сообщения об ошибке. Но правильный способ использовать 'put()' - с 'yield', иначе он не будет выполняться. Когда я помещаю 'yield', он кричит синтаксическую ошибку, потому что она не находится внутри функции генератора. – Anney