2017-09-12 55 views
1

我试图在renderSelect中获取PromiseValue。 (在tmp将承诺的价值返回给另一个函数

事情是我得到一个承诺,这是正常的行为。但我不明白我怎么能够得到承诺的价值,所以我可以与他们合作。

我有一个ApiService类如下

handleResponse(response) { 
    if (response.status >= 200 && response.status < 300) { 
    return response.json(); 
    } 
    return response.json() 
    .then((res) => { 
     throw new Error(res.message); 
    }, 
    () => { 
     throw new Error(); 
    }); 
} 


get(url) { 
    return fetch(`${this.API_URL}${url}`, { 
    method: 'GET', 
    headers: this.headers, 
    }) 
    .then(response => this.handleResponse(response)); 
} 

而且我.jsx这样

const getOptions = (contractor_employee_id) => { 
    const apiService = new ApiService() 
    return apiService 
    .get(`some_url`) 
    .then(
     response => { 
     return ["toto", "tata", "titi"] 
    }, 
    err => (console.log("Failed")) 
    ); 
}; 

const renderSelect = (field) => { 
    const tmp = getOptions(field.id) 
    console.log(tmp) 

回答

2

承诺是异步。如果你想以同步的方式返回promise结果,则使用async/await。

const renderSelect = async (field) => { 
    const tmp = await getOptions(field.id) 
    console.log(tmp) 
} 
0

您可以使用JavaScript Promise的承诺返回renderSelect

const getOptions = (contractor_employee_id) => { 
    const apiService = new ApiService() 
    return new Promise((resolve, reject) => { 
     apiService 
      .get(`some_url`) 
      .then(
       response => { 
       resolve(["toto", "tata", "titi"]); 
      }, 
      err => (console.log("Failed") reject('failed');) 
      ); 
     }; 

     }) 
} 

const renderSelect = (field) => { 
    getOptions(field.id).then((res) => { 
     console.log(tmp); 
    }) 
} 
相关问题