javascript和react对组件调用异步操作
我有一个类,它在javascript和react对组件调用异步操作,javascript,reactjs,Javascript,Reactjs,我有一个类,它在ComponentDidMount 就像: componentDidMount(){ // var my_call = new APICall() Promise.resolve(new APICall()).then(console.log(FB)) } class APICall{ constructor(){ window.fbAsyncInit = () => { FB.init({
ComponentDidMount
就像:
componentDidMount(){
// var my_call = new APICall()
Promise.resolve(new APICall()).then(console.log(FB))
}
class APICall{
constructor(){
window.fbAsyncInit = () => {
FB.init({
appId : '254258789655',
cookie : true,
xfbml : true,
version : 'v2.5'
});
}
if (typeof(FB) == 'undefined') {
((d, s, id) => {
let js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s);
js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
})(document, 'script', 'facebook-jssdk');
}
}
}
export default APICall
但我的电话不是同步的
只有在调用了我的api
类之后,我如何才能调用then
的值
这里给我的FB
是未定义的错误。如何先加载sdk
,然后调用FB
谢谢获取一个函数引用,而您已经为它提供了的返回结果,即
副作用是调用了console.log
,并打印了“hellooww”
您需要提供一个新的执行上下文,也称为回调
componentDidMount () {
Promise.resolve(new APICall()).then(function () {
console.log("hellooww");
});
}
当您调用
Promise.resolve
时,您将返回一个已解析的承诺,因此然后
将立即执行。
您可能希望在调用
fbAsyncint
时执行代码,因此,您需要建立一些机制,将您的组件连接到该流。这取决于APICall
实际做了什么/您应该让它返回一个承诺。@Alexander您能看看我的更新并告诉我什么是FB
?这个变量是在哪里定义的?什么是sdk
?您根本没有提供一个清晰的画面,而且似乎您真的对范围和执行上下文迷失了方向。帮帮我们帮帮你,我已经编辑了我的问题。你能帮个忙吗?我现在的答案仍然适用于你的代码。请阅读.then
的函数签名,并认识到.then(console.log(…)
并没有做您认为它做的事情。我已经添加了.then(function(){console.log(FB)})
,但它给我FB并没有定义错误。这意味着console.log(FB)
在我的APICall()类之前首先被调用