Promise katika JavaScript

"I Promise a Result!"

"Producing code (programu ya kuzingatia)" ina huzui kutumia muda mwingi

"Consuming code (programu ya kusoma)" ina huzui kutumia matokeo

Promise ina kampuni ya JavaScript inayolinkisha programu ya kuzingatia na programu ya kusoma

Kampuni ya JavaScript Promise

Kampuni ya JavaScript Promise ina programu ya kuzingatia na kusaidia kusoma kwa kufanyia:

Inaumia ya kampuni ya Promise

let myPromise = new Promise(function(myResolve, myReject) {
// "Producing Code" (ina huzui kutumia muda mwingi)
  myResolve(); // Kufanana
  myReject();  // Kosa
});
// "Consuming Code" (ina huzui kutumia kipendekezo cha kufanyika)
myPromise.then(
  function(thamani) { /* Kufanana kina programu */ },
  function(kosa) { /* Kosa kina programu */ }
);

Kampuni ya kufanyia kwa sababu ya kumekuwa na matokeo, ina huzui kutumia mabagili yeyote ya kuzingatia kwa mbali mbali:

Matokeo Tumia
Kufanana myResolve(thamani)
Kukosa myReject(kampuni ya kosa)

Mafuta ya kampuni ya Promise

Kampuni ya JavaScript Promise inaweza kwa mpangilio wa:

  • Inaharibika
  • Kufanyika
  • Kufutwa

Kampuni ya Promise inasimamia mafuta mbili:state na matokeo.

Kampuni ya Promise ina matokeo bila maana wakati ina "inaharibika" (kushika).

Kampuni ya Promise ina matokeo kama thamani wakati ina "kufanyika".

Kampuni ya Promise ina matokeo kama kampuni ya kosa wakati ina "kufutwa".

myPromise.state myPromise.result
"inaharibika" Bila maana
"kufanyika" Wakati wa matokeo
"kufutwa" Kampuni ya kosa

Ina huzui kusoma mafuta ya Promise na matokeo.

Ina huzui kutumia mtihani Promise.

Kisha huzui kusaidia Promise

Hapa ni maelezo ya matumizi ya Promise:}

myPromise.then(
  function(value) { /* code if successful */ },
  function(error) { /* code if some error */ }
);

Promise.then() ina thamani mbili, moja ni kikubaliano kwa kushinda na mengine ni kikubaliano kwa kushindwa.

Zote zimehewa, kwa hiyo unaweza kuongeza kikubaliano kwa kushinda au kushindwa.

Mfano

function myDisplayer(some) {
  document.getElementById("demo").innerHTML = some;
}
let myPromise = new Promise(function(myResolve, myReject) {
  let x = 0;
// Kichunguzia mitaa (hii inaweza kuchukua wakati fulani)
  if (x == 0) {
    myResolve("Sikuwezi");
  } else {
    myReject("Kosa");
  }
});
myPromise.then(
  function(value) {myDisplayer(value);},
  function(error) {myDisplayer(error);}
);

Try it yourself

Mfano wa JavaScript Promise

Kwa kutoa maelezo ya kuanzisha Promise, tutumia maelezo wa kikubaliano kutoka kitengo kilichopita:

  • Weka kwa muda
  • Weka faili

Weka kwa muda

Mfano wa mtumiaji wa kikubaliano

setTimeout(function() { myFunction("Nimejua wewe !!!"); }, 3000);
function myFunction(value) {
  document.getElementById("demo").innerHTML = value;
}

Try it yourself

Mfano wa mtumiaji wa Promise

let myPromise = new Promise(function(myResolve, myReject) {
  setTimeout(function() { myResolve("Nimejua wewe !!"); }, 3000);
});
myPromise.then(function(value) {
  document.getElementById("demo").innerHTML = value;
});

Try it yourself

Weka faili

Mfano wa mtumiaji wa kikubaliano

function getFile(myCallback) {
  let req = new XMLHttpRequest();
  req.open('GET', "mycar.html");
  req.onload = function() {
    if (req.status == 200) {}}
      myCallback(req.responseText);
    } else {
      myCallback("Kosa: " + req.status);
    }
  }
  req.send();
}
getFile(myDisplayer);

Try it yourself

Mfano wa mtumiaji wa Promise

let myPromise = new Promise(function(myResolve, myReject) {
  let req = new XMLHttpRequest();
  req.open('GET', "mycar.htm");
  req.onload = function() {
    if (req.status == 200) {}}
      myResolve(req.response);
    } else {
      myReject("File not Found");
    }
  };
  req.send();
});
myPromise.then(
  function(value) {myDisplayer(value);},
  function(error) {myDisplayer(error);}
);

Try it yourself

Browser support

ECMAScript 2015, also known as ES6, introduced JavaScript Promise objects.

The following table indicates the first browser version to fully support Promise objects:

Chrome IE Firefox Safari Opera
Chrome 33 Edge 12 Firefox 29 Safari 7.1 Opera 20
February 2014 July 2015 April 2014 September 2014 March 2014