项目在此Github Repository .带有代码的文件位于 components/Soundboard.js
这段代码以前可以运行,但现在看来,promise 一直在运行。看起来解析函数和拒绝函数都没有执行,因为如果我取消注释下面的所有注释行并调用函数 askForPurchase()
打印到控制台的唯一内容是
"_40": 0, "_55": {"_40": 0, "_55": null, "_65": 0, "_72": null}, "_65": 3, "_72": null}
的对象对于线路 console.log(RNIap.getPurchaseHistory())
end
这个词. buyProduct()
函数也不再初始化 IAP。const buyProduct = function(){
RNIap.requestPurchase("1985162691", false).then(purchase => {
store.dispatch(setPurchases(purchase))
await RNIap.finishTransaction(purchase, false) //developerPayloadAndroid?: string Should I use this argument? I don't get how to use it
}).catch((error) => {
console.log(error.message);
})
}
const askForPurchase = function(){
if (!store.getState().purchase){
//console.log(RNIap.getPurchaseHistory())
RNIap.getPurchaseHistory().then(purchase => {
//console.log(`test1`)
store.dispatch(setPurchases(purchase))
if (purchase.length == 0){
//console.log(`test if`)
buyProduct()
}else{
//console.log(`test else`)
RNIap.getAvailablePurchases()
}
}, reason => {
console.log(reason)
})
//console.log(`end`)
}
}
额外
这段代码几个月前还在工作,我什至从那时起提交了一个提交(1b9cb81f229680e173ce910892dddedc632c1651,评论:“让印章图片更卡通化”)来测试。拉出此提交后,我删除了我的 node_modules 和 pod,并清理了我的构建文件夹,但是
askForPurchase()
和 buyProduct()
功能也不再在该提交中起作用。我正在运行 ios 13.6.1 的真实 iPhone SE 上进行测试
如果您需要测试它,我创建了一个沙盒测试器,但我认为您不需要它
email: rniapsandbox@gmail.com
pw: Somepassword1
最佳答案
你好@Sam 问题是异步等待问题,他们无法获得值(value),因为他们在获取数据之前没有等待获取数据,它在没有数据的情况下触发它并且它正在返回 promise ,所以你必须使用 async function
所以你的代码就像
const buyProduct = async()=>{
await RNIap.requestPurchase("1985162691", false).then(purchase => {
store.dispatch(setPurchases(purchase))
await RNIap.finishTransaction(purchase, false) //developerPayloadAndroid?: string Should I use this argument? I don't get how to use it
}).catch((error) => {
console.log(error.message);
})}
const askForPurchase = async()=>{
if (!store.getState().purchase){
//console.log(await RNIap.getPurchaseHistory())
await RNIap.getPurchaseHistory().then(purchase => {
//console.log(`test1`)
store.dispatch(setPurchases(purchase))
if (purchase.length == 0){
//console.log(`test if`)
buyProduct()
}else{
//console.log(`test else`)
RNIap.getAvailablePurchases()
}
}, reason => {
console.log(reason)
})
//console.log(`end`)
}}
关于ios - React Native : RNIap. getPurchaseHistory().then 无限运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63478519/