Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript和react对组件调用异步操作_Javascript_Reactjs - Fatal编程技术网

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()类之前首先被调用