基于其他callBack函数的函数... react-native

时间:2019-03-03 18:48:42

标签: javascript react-native

当用户想要发布东西时,必须将他唱歌(没有用户名和密码)。 问题是我试图在调用CreatePost()时使它调用SingUser(),并基于SingUser()提取请求将再次调用CreatePost()以便用户登录后发帖。

这是在createpost组件中

CreatePost(){
    fetch(url ,{
      method :'POST',
      headers:{
        Accept:'application/json',
        'Content-Type' :'application/json',
      },
      body: JSON.stringify(post)
   }).then((response) => response.json())
  .then((responseJson)=>{
      if(responseJson.status =='inactive'){
               //SignUser
      }else{
             //post
      }
  }).catch((error)=>{ //later
  });
}

这是其他文件中的SingUser()

async function SignUser() {
           try{
          User.vtoken = await AsyncStorage.getItem('vtoken');
          var userTemp={
            vtoken: User.vtoken,
            ntoken : User.ntoken
            }
                fetch(url,{
                    method :'POST',
                    headers:{
                      Accep : 'application/json',
                      'Content-Type': 'application/json',
                    },
                    body: JSON.stringify(userTemp)
                  }).then((response)=> response.json()).
                then((responseJson)=>{
                        if(responseJson.path == 2){
                            Save(responseJson, userTemp);}
                            else return;
                  }).catch((error)=>{
                     });
            
       }catch(error){}
}

async function Save(result , userTemp){
    try{
        await AsyncStorage.setItem('vtoken', result.vtoken);
            User.vtoken = result.vtoken;
            userTemp.vtoken = result.vtoken;

          fetch(url,{
            method :'POST',
            headers:{
              Accep : 'application/json',
              'Content-Type': 'application/json',
            },
            body: JSON.stringify(userTemp)
          }).then((response)=>response.json()).
          then((responseJson)=>{
              return 'done';
          }).catch((error)=>{})
      }
      catch(error){}
}
export {SignUser}

如果希望有更好的方法,我希望您能理解我的想法thnx:(

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

const errorCodeMap = {
  USER_INACTIVE: 10,
}

const statusMap = {
  INACTIVE: `inactive`
}

const METHOD = `POST`
const APPLICATION_JSON = `application/json`

const headerDefault = {
  Accept: APPLICATION_JSON,
  'Content-Type': APPLICATION_JSON,
}

const who = `post`

async function createPost(payload, options) {
  try {
    const {
      url = ``,
      fetchOptions = {
        method: METHOD,
        headers: headerDefault,
      },
    } = options
    const {
      post,
    } = payload

    const response = await fetch(url, {
      ...fetchOptions,
      body: JSON.stringify(post)
    })

    const {
      status,
      someUsefulData,
    } = await response.json()

    if (status === statusMap.INACTIVE) {
      return {
        data: null,
        errors: [{
          type: who,
          code: errorCodeMap.USER_INACTIVE,
          message: `User inactive`
        }]
      }
    } else {
      const data = someNormalizeFunction(someUsefulData)

      return {
        data,
        errors: [],
      }
    }
  } catch (err) {

  }
}

async function createPostRepeatOnInactive(payload, options) {
  try {
    const {
      repeat = 1,
    } = options

    let index = repeat
    while (index--) {
      const { data, errors } = createPost(payload, options)

      if (errors.length) {
        await signUser()
      } else {
        return {
          data,
          errors,
        }
      }
    }
  } catch (err) {

  }
}

答案 1 :(得分:0)

解决它,我没有做任何调整

async CreatePost(){
   try{
     var response = await fetch(url ,{
      method :'POST',
      headers:{
        Accept:'application/json',
        'Content-Type' :'application/json',
      },
      body: JSON.stringify(post)});
      var responseJson = await response.json();
      if(responseJson.status =='inactive' && postRepeat == true){
               postRepeat == false;
                await SignUser();
                this.CreatePost();
      }
       else{
        //posted
      }
}catch(err){}
}