2017-09-12 54 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); 
    }) 
} 
相關問題