Promise جی‌اس‌ئی

"I Promise a Result!"

"Producing code(生产代码)" 是需要一些时间的代码

"Consuming code(消费代码)" 是必须等待结果的代码

Promise 是一个 JavaScript 对象,它链接生成代码和消费代码

JavaScript Promise 对象

JavaScript Promise 对象包含生产代码和对消费代码的调用:

Promise 语法

let myPromise = new Promise(function(myResolve, myReject) {
// "Producing Code"(可能需要一些时间)
  myResolve(); // 成功时
  myReject();  // 出错时
});
// "Consuming Code" (必须等待一个兑现的承诺)
myPromise.then(
  function(value) { /* 成功时的代码 */ },
  function(error) { /* 出错时的代码 */ }
);

当执行代码获得结果时,它应该调用两个回调之一:

نتیجہ کال
کامیاب myResolve(result value)
غلط آمد myReject(error object)

Promise نمائش خصوصیات

JavaScript Promise نمائش بذات خود بterraئی سکتا ہے:

  • Pending
  • Fulfilled
  • Rejected

Promise نمائش دو خصوصیات دیتا ہے:state اور result.

جبPromise نمائش "pending" (کام کاج) ہوتی ہے تو نتیجہ undefined ہوتا ہے

جبPromise نمائش "fulfilled" ہوتی ہے تو نتیجہ ایک مقدار ہوتا ہے

جبPromise نمائش "rejected" ہوتی ہے تو نتیجہ ایک غلط آئیٹم ہوتا ہے

myPromise.state myPromise.result
"pending" undefined
"fulfilled" نتیجاتی مقدار
"rejected" error آئیٹم

آپ Promise نمائش کی خصوصیات state اور result تک نہیں پہنچ سکتے

آپ کو Promise مند طریق استعمال کرنا پڑتا ہے

کيف از Promise استفادہ کریں

آئیں گے کہ Promise کا کس طرح استعمال کیا جاتا ہے:

myPromise.then(
  function(value) { /* اگر کامیاب ہوا ہے تو اس کا کوڈ */ },
  function(error) { /* اگر کوئی غلطی ہوئی ہے تو اس کا کوڈ */ }
);

Promise.then() کے پاس دو پارامتر ہوتے ہیں، ایک کامیابی کیلئے اور دوسرا ناکامی کیلئے کال بیک ہوتا ہے。

دوں وہیچھی چناؤ کا عمل ہوتا ہے، لہذا آپ کامیابی یا ناکامی کیلئے کال بیک اضافہ کرسکتے ہیں。

مثال

function myDisplayer(some) {
  document.getElementById("demo").innerHTML = some;
}
let myPromise = new Promise(function(myResolve, myReject) {
  let x = 0;
// کد پیدا کرنا (یہ کچھ وقت لگ سکتا ہے)
  if (x == 0) {
    myResolve("OK");
  } else {
    myReject("Error");
  }
});
myPromise.then(
  function(value) {myDisplayer(value);},
  function(error) {myDisplayer(error);}
);

亲自试一试

JavaScript Promise مثال

Promise کا استعمال کا مظاہرہ کریں گے، تو ہم پچھلے فصل میں کال بیک کا مثال استعمال کریں گے:

  • طولانی مدت کا انتظار
  • فائل کا انتظار

طولانی مدت کا انتظار

کال بیک کا مثال استعمال

setTimeout(function() { myFunction("I love You !!!"); }, 3000);
function myFunction(value) {
  document.getElementById("demo").innerHTML = value;
}

亲自试一试

Promise کا مثال استعمال

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

亲自试一试

فائل کا انتظار

کال بیک کا مثال استعمال

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

亲自试一试

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);}
);

亲自试一试

浏览器支持

ECMAScript 2015,也称为 ES6,引入了 JavaScript Promise 对象。

下表注明了首个完全支持 Promise 对象的浏览器版本:

Chrome آئی ای فائر فاکس سافری اوپریا
کروم 33 ایج 12 فائر فاکس 29 سافری 7.1 اوپریا 20
فروری 2014 جولائی 2015 اپریل 2014 ستمبر 2014 مارچ 2014