Track
/
JavaScript
JavaScript
/
Esercizi
/
Raccoglitore di frutta
Raccoglitore di frutta

Raccoglitore di frutta

Esercizio di apprendimento

Introduzione

Funzioni di callback

Le funzioni di callback sono funzioni passate come argomenti. Questo schema di programmazione crea una sequenza di chiamate di funzione sia nella programmazione sincrona che in quella asincrona. Scrivere una funzione di callback non è diverso dallo scrivere una funzione; la funzione di callback, però, deve corrispondere alla firma definita dalla funzione chiamante.

const squareLength = 5;

// Caller function takes a callback function
function applyToSquare(callback) {
  return callback(squareLength);
}

// Callback must expect the possible argument from the calling function
function areaOfSquare(number) {
  return number * number;
}

applyToSquare(areaOfSquare); // => 25

Puoi anche scrivere le callback come espressione di funzione, espressione di funzione anonima o espressione di funzione freccia:

applyToSquare(function squarePerimeter(side) {
  return side * 4;
});

applyToSquare(function (side) {
  return side * 4;
});

applyToSquare((side) => {
  return side * 4;
});

Istruzioni

Stai creando un nuovo portale online per permettere ai tuoi clienti di ordinare la frutta fresca direttamente dal fruttivendolo. Il fruttivendolo ha un'API che puoi usare per verificare se ha la merce desiderata dai tuoi clienti. Devi creare una piccola libreria di funzioni per interagire con l'API del fruttivendolo.

1. Avvisa il cliente quando il suo ordine è andato a buon fine

Il portale deve avvisare il cliente se il suo ordine è andato a buon fine. Definisci la funzione di callback onSuccess che verrà chiamata se l'ordine è andato a buon fine, cioè se il fruttivendolo aveva abbastanza frutta in magazzino. Questa funzione deve chiamare la funzione notify importata, passandole { message: 'SUCCESS' } per far sapere al tuo cliente che il suo ordine è andato a buon fine.

onSuccess();
// => `notify` called with `{ message: 'SUCCESS' }`

2. Avvisa il cliente quando il suo ordine non è andato a buon fine

Il portale deve avvisare il cliente se il suo ordine non è andato a buon fine. Definisci la funzione di callback onError che verrà chiamata se l'ordine non è andato a buon fine perché il fruttivendolo non ha la frutta in magazzino oppure si è verificato un errore. Questa funzione deve chiamare la funzione notify importata, passandole { message: 'ERROR' } per far sapere al tuo cliente che il suo ordine non è andato a buon fine.

onError();
// => `notify` called with `{ message: 'ERROR' }`

3. Crea un wrapper per la funzione di ordine dell'API del fruttivendolo

Gli ordini di frutta vengono effettuati tramite l'API del fruttivendolo, usando la funzione order fornita. Questa funzione riceve tre argomenti: una query, che contiene la variety e la quantity della frutta richiesta, una funzione di callback da chiamare quando l'ordine va a buon fine, e una funzione di callback da chiamare quando l'ordine incontra un errore.

Vuoi isolare il tuo codice da potenziali cambiamenti esterni e decidi di racchiudere la chiamata alla funzione order dentro una nuova funzione chiamata orderFromGrocer. Implementa la funzione orderFromGrocer che tenta di effettuare un ordine tramite una chiamata alla funzione order dell'API del fruttivendolo, assicurandoti di inoltrare alla chiamata API gli argomenti passati a orderFromGrocer.

La query ha la forma di un oggetto:

const query = {
  variety: string,
  quantity: number,
};
orderFromGrocer(
  { variety: 'pear', quantity: 12 },
  exampleSuccessCallback,
  exampleErrorCallback,
);
// => `order` was called with the query and the callbacks

4. Semplifica la gestione degli ordini effettuati

Ora i tuoi clienti possono effettuare ordini di frutta tramite il tuo portale, tuttavia ti accorgi di chiamare la funzione orderFromGrocer in molti punti diversi del tuo codice, ogni volta dovendo passare come argomenti una query e le due funzioni di callback. Vedendo un'opportunità per riorganizzare il tuo codice, pensi che sarebbe più semplice poter effettuare un ordine passando solo la variety e la quantity della frutta richiesta. Definisci la funzione ausiliaria postOrder che prende variety e quantity come argomenti e tenta di effettuare un ordine con il fruttivendolo.

postOrder('peach', 100);
// => order placed for 100 peaches
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
JavaScript Exercism

Vuoi iniziare Raccoglitore di frutta?

Iscriviti a Exercism per imparare e padroneggiare JavaScript con 37 concetti159 esercizi e il mentoring di persone reali, tutto gratis.