A promessa/diferida é uma boa especificação para lidar com a codificação de chamadas assíncronas. O seguinte usa o código NODEJS como uma classe para implementar uma simples implementação de promessa/uma especificação
A cópia do código é a seguinte:
/**
* Criado com o JetBrains Webstorm.
* Usuário: Xuwenmin
* Data: 14-4-1
* Horário: 9:54
* Para alterar este modelo, use o arquivo | Configurações | Modelos de arquivo.
*/
var eventEMitter = requer ('eventos'). EventEmitter;
var http = requer ('http');
var util = requer ('util');
// Definir objeto de promessa
var promey = function () {
// Implementar aula de evento de herança
EventEmitter.call (this);
}
// Método geral de herdar eventos
util.Irits (Promise, EventEmitter);
// então o método é o método na promessa/uma especificação
Promise.prototype.Then = function (SuccessHandler, ErrorHandler, ProgressHandler) {
if (typeof succcesshaHandler == 'function') {
this.once ('Sucesso', SuccessHandler);
}
if (typeof errorHandler === 'function') {
this.once ('error', errorHandler);
}
if (typeof progressHandler === 'function') {
this.on ('Process', ProgressHandler);
}
devolver isso;
}
// Definir objeto de atraso
// contém um estado e um objeto de promessa
var diferred = function () {
this.state = 'não realizado';
this.promise = new Promise ();
}
Adtered.prototype.resolve = function (obj) {
this.state = 'cumprido';
this.promise.emit ('sucesso', obj);
}
Adeferred.prototype.reject = function (err) {
this.state = 'falhou';
this.promise.emit ('error', err);
}
Adtered.prototype.progress = function (dados) {
this.promise.emit ('processo', dados);
}
// Use uma solicitação HTTP para usar a promessa/diferida definida acima
var client = function () {
var options = {
HostName: 'www.baidu.com',
Porta: 80,
caminho:'/',
Método: 'Get'
};
var diferred = new adiferred ();
var req = http.request (opções, função (res) {
res.setEncoding ('UTF-8');
var dados = '';
res.on ('dados', função (chunk) {
dados += chunk;
adiado.progress (pedaço);
});
res.on ('end', function () {
diferred.Resolve (Data);
});
});
req.on ('erro', função (err) {
diferred.Reject (err);
})
req.end ();
return diferred.promise;
}
client (). Então (função (dados) {
console.log ('solicitação concluída', dados);
}, function (err) {
console.log ('Erro de acesso', err);
}, função (chunk) {
console.log ('Reading', Chunk);
});
Salve o código como Promise.js, você pode executá -lo sob a linha de comando. Digite o Node Promise.js diretamente para ver o efeito em execução.