我在我的商店使用redux-saga,https://github.com/chirag04/react-native-in-app-utils加载我的Apple应用内购买产品。
要检索的格式为:
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
}
如何将产品保存到我的商店?
修改 我能够通过将它包装在Promise中来实现它。
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);
});
});
}
我不确定我是否正在进行错误处理。
答案 0 :(得分:0)
等待InAppUtils.loadProducts
。您可以使用yield来执行此操作。
export function* iosSubscriptionSaga() {
try {
let resp = yield validateUserReceipt();
let respProducts = yield call(InAppUtils.loadProducts, products);
yield put(IapActions.loadSubscriptionProduct(products[0]))
} catch (e) {
yield put(IapActions.loadSubscriptionsFailure('Error: Failed to load products from iTunes Connect.'))
}
}
要在yield
回调中使用loadProducts
关键字,请将回调重写为生成器函数。
InAppUtils.loadProducts(products, function* onComplete(error, products) {
yield put(...);
});
我建议阅读有关生成器主题的更多内容 - 它会让您的生活更轻松,代码更容易阅读;)