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 |
- پچھلے پیج جسٹا سکریپٹ آسنک
- پیچھلے پیج جسٹا سکریپٹ آسنک