>일반적인 문제 >약속의 원칙은 무엇인가?

약속의 원칙은 무엇인가?

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼원래의
2020-01-06 15:19:449297검색

1. Promise 적용 시나리오

약속의 원칙은 무엇인가?

getData(function(a){  
    getMoreData(a, function(b){
        getMoreData(b, function(c){ 
            getMoreData(c, function(d){ 
                getMoreData(d, function(e){ 
                    ...
                });
            });
        });
    });
});
위의 코드는 레이어별로 중첩되어 있어 매우 무섭게 보입니다. 복잡한 논리적 판단이 추가되면 코드의 가독성이 매우 나빠집니다.

그러나 promise를 사용하는 경우:

function getData() {
    return new Promise(function (resolve, reject) {
        resolve(1);
    });
}
function getMoreData(arg) {
    return new Promise(function (resolve, reject) {
        resolve(arg + 10);
    });
}
getData().then(function (a) {
    console.log(a); // 1
    return getMoreData(a);
}).then(function (b) {
    console.log(b); // 11
})
위 코드를 더 간결하게 만드세요
getData()
.then(a => getMoreData(a))
.then(b => console.log(b));
2.promise는 여러 요청을 보낸 후에 결과를 얻을 수 있으며 그런 다음 특정 결과를 얻거나 처리할 수 있습니다

// 两个数据都回来之后再进行操作
let fs = require('fs');
fs.readFile('./1.txt', 'utf8', function (err, data) {
    console.log(data);
})
fs.readFile('./2.txt', 'utf8', function (err, data) {
    console.log(data);
})
Promise를 사용하는 경우 다음을 달성할 수 있습니다:
let fs = require('fs');
function read(url){
    return new Promise(function(resolve,reject){
        fs.readFile(url,'utf8',function(err,data){
            if(err)reject(err);
            resolve(data);
        })
    })
}
Promise.all([read('1.txt'),read('2.txt')]).then(data=>{
    console.log(data);
},err=>{
    console.log(err);
});

2. Promise 원칙 구현

1. 가장 간단한 구현

위의 애플리케이션 시나리오를 기반으로 Promise는 pedding, Fulfilled 및 Fulfilled의 세 가지 상태를 가질 수 있음을 알 수 있습니다. 거부되었습니다.

Pending Promise 객체 인스턴스가 생성될 때의 초기 상태

Fulfilled는 성공한 상태로 이해될 수 있습니다. Rejected는 실패한 상태로 이해될 수 있습니다.

·

Promise 인스턴스를 구성하려면 다음이 필요합니다. Promise 생성자 함수를 전달합니다. 전달된 함수에는 두 개의 형식 매개변수가 있어야 하며, 둘 다 함수 유형 매개변수입니다. 그들은 각각 해결과 거부입니다.

·

Promise에도 then 메소드가 있습니다. then 메소드는 Promise 객체의 상태가 변경될 때 수행할 작업을 지정하는 데 사용됩니다. 첫 번째 함수(onFulfilled)는 해결 시 실행됩니다. 거부 시 두 번째 함수(onFulfilled)가 실행됩니다. onRejected)

·상태가 해결로 변경되면 거부로 변경될 수 없으며 그 반대도 마찬가지입니다. 위의 설명을 바탕으로 우리는 그러한 약속을 구현할 수 있습니다

function Promise(executor){ //executor执行器
    let self = this;
    self.status = 'pending'; //等待态
    self.value  = undefined; // 表示当前成功的值
    self.reason = undefined; // 表示是失败的值
    function resolve(value){ // 成功的方法
        if(self.status === 'pending'){
            self.status = 'resolved';
            self.value = value;
        }
    }
    function reject(reason){ //失败的方法
        if(self.status === 'pending'){
            self.status = 'rejected';
            self.reason = reason;
        }
    }
    executor(resolve,reject);
}
Promise.prototype.then = function(onFufiled,onRejected){
    let self = this;
    if(self.status === 'resolved'){
        onFufiled(self.value);
    }
    if(self.status === 'rejected'){
        onRejected(self.reason);
    }
}
module.exports = Promise;

자세한 내용FAQ을 보려면 PHP 중국어 웹사이트를 방문하세요.

위 내용은 약속의 원칙은 무엇인가?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:무도회가 뭐야?다음 기사:무도회가 뭐야?