Я создал функцию Fetch для использования JSON API и определил типы для объекта JSON. Я запутался в том, как определить тип возвращаемого значения для функции getCurrentJobAPI
, так как после этого я делаю кучу .then()
. Является ли возвращаемое значение последним .then()? В моем коде последний .then() — это setState, так что же это за тип?
getCurrentJobAPI = (): {} => {
const url: string = `dummy_url&job_id=${this.props.currentJob}`;
return fetch(url, {credentials: 'include'})
.then((response) => {
return response.json();
})
.then((json: CurrentJob) => {
console.log(json);
const location = json.inventoryJob.location;
const ref_note = json.inventoryJob.note;
const id = json.inventoryJob.id;
const models = json.inventoryJobDetails.map((j) => {
return Object.assign({}, {
code: j.code,
qty: j.qty
})
});
this.setState({ currentCodes: models, location: location, ref_note: ref_note, id: id})
return json
})
.then((json: CurrentJob) => {
const barcodes = json.inventoryJob.history;
if (barcodes.length > 0) {
this.setState({apiBarcodes: barcodes})
}
this.calculateRows();
this.insertApiBarcodes();
this.setState({ initialLoad: true });
})
};
ОБНОВЛЕНИЕ:
Хотя я понимаю, что должен определить Promise<type>
как возвращаемое значение getCurrentJobAPI
(см. ответ Гилада и комментарии ), я все еще не уверен, почему я не могу написать Promise<CurrentJob>
, если Fetch разрешается как ответ JSON.
[Я сократил свои операторы .then() в соответствии с рекомендацией loganfsmyth.]
Вот определения типа для CurrentJob
:
type Job = {
user_id: number,
status: 'open' | 'closed',
location: 'string',
history: {[number]: string}[],
note: string,
} & CommonCurrentJob;
type JobDetails = {
iaj_id: number,
code: number,
} & CommonCurrentJob;
type CommonCurrentJob = {
id: number,
qty: number,
qty_changed: number,
created_at: string,
updated_at: string
}
getCurrentJobAPI()
и присоединить к нему дополнительные элементы типаthen
иcatch
. Это то, что вы спрашивали? В противном случае я не уверен, что сказать. Вы не можете вернуть ничего, кроме самого промиса, потому что иначе он больше не был бы асинхронным. - person Matt Fletcher   schedule 20.11.2017.then
не нужен. Вы используете.then
либо для возврата другого промиса, либо в качестве последнего обработчика в цепочке промисов. Большинство ваших промежуточных обработчиков.then
просто возвращаютundefined
, чтобы вы могли свернуть их в первый.then
. - person loganfsmyth   schedule 20.11.2017