이렇게 직접적인 Promise 구현은 못 봤어요.
var Promise = (function () {
var state = { pending: 0, resolved: 1, rejected: 2 };
var Promise = function (asyncTask) {
var asyncState = state.pending;
var hasSolution = false;
var asyncResult = [];
var asyncError = [];
var projectA = null;
var projectB = null;
var represent = { resolve: null, reject: null };
var resolve = function () {
asyncState = state.resolved;
asyncResult = arguments;
if (hasSolution) {
if (typeof projectA === 'function') {
asyncPlan(projectA, arguments);
}
else {
represent.resolve.apply(undefined, arguments);
}
}
};
var reject = function () {
asyncState = state.rejected;
asyncError = arguments;
if (hasSolution) {
if (typeof projectB === 'function') {
asyncPlan(projectB, arguments);
}
else {
represent.reject.apply(undefined, arguments);
}
}
};
this.then = function (successPlan, failurePlan) {
hasSolution = true;
switch (asyncState) {
case state.pending:
projectA = successPlan;
projectB = failurePlan;
return new Promise(function (resolve, reject) {
represent.resolve = resolve;
represent.reject = reject;
});
case state.resolved:
if (typeof successPlan === 'function') {
return syncPlan(successPlan, asyncResult);
}
else {
return Promise.resolve.apply(undefined, asyncResult);
}
case state.rejected:
if (typeof failurePlan === 'function') {
return syncPlan(failurePlan, asyncError);
}
else {
return Promise.reject.apply(undefined, asyncError);
}
}
};
var syncPlan = function (plan, argus) {
var result = undefined;
try {
result = plan.apply(undefined, argus);
}
catch (error) {
return Promise.reject(error);
}
if (result instanceof Promise) {
return result;
}
else {
return Promise.resolve(result);
}
};
var asyncPlan = function (plan, argus) {
var result = undefined;
try {
result = plan.apply(undefined, argus);
}
catch (error) {
represent.reject.call(undefined, error);
}
if (result instanceof Promise) {
result.then(function () {
represent.resolve.apply(undefined, arguments);
}, function () {
represent.reject.apply(undefined, arguments);
});
}
else {
represent.resolve.call(undefined, result);
}
};
this.catch = function (failurePlan) {
return this.then(undefined, failurePlan);
};
try {
asyncTask(resolve, reject);
}
catch (error) {
reject(error);
}
};
Promise.resolve = function () {
var argus = arguments;
return new Promise(function (resolve) {
resolve.apply(undefined, argus);
});
};
Promise.reject = function () {
var argus = arguments;
return new Promise(function (none, reject) {
reject.apply(undefined, argus);
});
}
return Promise;
})();
나 는 알고 있는 원문 이다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.