作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试确定客户是否有有效订阅。为此,我使用了以下代码:
const stripe = require('stripe')('some-api-key');
export default function Example(){
// the user will automatically be considered non-subbed by default
const [isSubscriber, setIsSubscriber] = useState(false)
// grab the customer id from stripe
async function get_customer_id() {
const customers = await stripe.customers.search({
query: `metadata[\'some-meta-data-key\']:\'some-meta-data-value\'`
});
return customers.data[0]['id']
}
// grab the list of active subscriptions from stripe
async function customer_is_subscriber(){
const subs = await stripe.subscriptions.list({
status: 'active',
});
return subs
}
// determine if the customer id is in the list of active subscriptions.
// return true if so, false otherwise
async function test_equality(){
const customer_id = await get_customer_id();
const subbed = await customer_is_subscriber();
const answer = subbed.find(sub => sub.customer === customer_id)
return !!answer;
}
useEffect( () => {
async function load_result() {
const promise_function_return = await test_equality()
setIsSubscriber(promise_function_return)
}
load_result();
}, [isSubscriber]);
return (
// some react code
)
}
我已经能够成功地获得所有其他功能,我正在比较用户是否是订户,但我遇到问题是更新状态值(例如,如果他们被替代,则为 true,否则为 false ).
我发现了一些关于这个特定主题的过去的好问题,例如:这里The useState set method is not reflecting a change immediately
此处:setState inside Promise in React
这里:setState inside a Promise function in a useEffect with hooks?
但我就是没能让它正常工作。这是目前我能够解决此问题的最接近方法。
最佳答案
目前您的代码表示,当 isSubscriber
更改时,它应该检查用户是否是订阅者并更新 isSubscriber
状态...所以这是先有鸡还是先有蛋的问题问题。在设置 isSubscriber
之前,它不会设置 isSubscriber
。
我认为你想将 }, [isSubscriber]);
更改为 }, []);
以便该代码在组件首次加载时执行(而不是isSubscriber
更改)。
关于javascript - 如何从 promise 中更新状态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71850441/
我是一名优秀的程序员,十分优秀!