Contoh pelaksanaan ringkas mekanisme Javascript Promise dalam nodejs_node.js

WBOY
Lepaskan: 2016-05-16 16:28:44
asal
1523 orang telah melayarinya

Promise/deferred ialah spesifikasi yang baik untuk mengendalikan pengekodan panggilan tak segerak Yang berikut menggunakan kod nodejs sebagai kelas untuk melaksanakan pelaksanaan mudah spesifikasi promise/A
.

Salin kod Kod adalah seperti berikut:

/**
 * Dicipta dengan JetBrains WebStorm.
 * Pengguna: xuwenmin
 * Tarikh: 14-4-1
 * Masa: 上午9:54
 * Untuk menukar templat ini gunakan Fail | Tetapan | Templat Fail.
 */

var EventEmitter = memerlukan('events').EventEmitter;
var http = memerlukan('http');
var util = memerlukan('util');
//Tentukan objek janji
var Janji = function(){
// Laksanakan kelas acara yang diwarisi
EventEmitter.call(this);
}
//Warisi kaedah am acara
util.inherits(Janji, Pemancar Acara);
//Kaedah kemudian ialah kaedah dalam spesifikasi promise/A
Promise.prototype.then = fungsi(successHandler, errorHandler, progressHandler){
Jika (jenis successHandler == 'fungsi'){
This.once('success', successHandler);
}
If (typeof errorHandler === 'function'){
This.once('error', errorHandler);
}
Jika (jenis progressHandler === 'fungsi'){
This.on('process', progressHandler);
}
Kembalikan ini;
}

//Tentukan objek tertunda
//Mengandungi keadaan dan objek janji
var Ditunda = function(){
This.state = 'unfulfilled';
This.promise = Janji baharu();
}
Deferred.prototype.resolve = function(obj){
This.state = 'dipenuhi';
This.promise.emit('berjaya', obj);
}
Deferred.prototype.reject = function(err){
This.state = 'gagal';
This.promise.emit('error', err);
}
Deferred.prototype.progress = fungsi(data){
This.promise.emit('process', data);
}

//Gunakan permintaan http untuk menggunakan janji/tertunda yang ditakrifkan di atas

var klien = function(){
pilihan var = {
Nama hos:'www.baidu.com',
Pelabuhan:80,
        laluan:'/',
Kaedah: 'dapatkan'
};
var tertunda = baru Tertunda();
var req = http.request(options, function(res){
          res.setEncoding('utf-8');
      var data = '';
          res.on('data', function(chunk){
              data = ketul;
               ditangguhkan. kemajuan(ketul);
});
          res.on('end', function(){
              tertunda.resolve(data);
});
});
req.on('error', function(err){
         ditangguhkan.reject(err);
})
req.end();
Pulangan tertunda.janji;
}
klien().then(fungsi(data){
console.log('Permintaan selesai', data);
}, fungsi(err){
Console.log('Ralat akses', err);
}, fungsi(ketulan){
console.log('membaca', ketul);
});

Kod disimpan sebagai promise.js dan boleh dijalankan di bawah baris arahan Terus masukkan nod promise.js untuk melihat kesan berjalan.

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!