[EcmaScript] async/await
async
및await
은 ES7의 제안입니다.많은 제3자 라이브러리는 이를
yield
+promise
의 문법당의 형식으로 실현했다.그러나 그들은 본질적으로 yield에만 의존하면 충분하다promise
는 일종의 용법일 뿐이다.(1)async와await
async function say(greeting){
return new Promise(function(resolve,then){
setTimeout(function(){
resolve(greeting);
},1500);
});
}
(async function(){
var v1=await say('Hello');
console.log(v1);
var v2=await say('World');
console.log(v2);
}());
(2)yield+promise의 문법 설탕
용례:
yieldPromise(function*(){
var v1=yield new Promise(function(resolve,reject){
setTimeout(function(){
resolve('Hello');
},1500);
});
console.warn(v1);
var v2=yield new Promise(function(resolve,reject){
setTimeout(function(){
resolve('World');
},1500);
});
console.warn(v2);
});
구현:
function yieldPromise(generator){
var iterator=generator();
recursiveCore.call(iterator);
}
function recursiveCore(feedback){
var iterator=this,
result=iterator.next(feedback);
if(result.done){
return;
}
var promise=result.value;
Promise.resolve(promise).then(function(v){
recursiveCore.call(iterator,v);
});
}
이것은 크롬에서 실행할 수 있다.
(3) 핵심은yield
즉,yield로call/cc
용례:
yieldContinuation(function*(){
var v1=yield function(k){
setTimeout(function(){
k('Hello');
},1500);
};
console.warn(v1);
var v2=yield function(k){
setTimeout(function(){
k('World');
},1500);
};
console.warn(v2);
});
구현 방법:
function yieldContinuation(generator){
var iterator=generator();
recursiveCore.call(iterator);
}
function recursiveCore(feedback){
var iterator=this,
result=iterator.next(feedback);
if(result.done){
return;
}
varyieldFunc=result.value;
yieldFunc(function(v){
recursiveCore.call(iterator,v);
});
}
이것은 크롬에서도 실행할 수 있다.
(4)promise로 쓰기
yieldContinuation(function*(){
var v1=yield function(k){
new Promise(function(resolve,reject){
setTimeout(function(){
resolve('Hello');
},1500);
}).then(k);
};
console.warn(v1);
var v2=yield function(k){
new Promise(function(resolve,reject){
setTimeout(function(){
resolve('World');
},1500);
}).then(k);
};
console.warn(v2);
});
이것도 당연히 운행할 수 있어야 한다.
(5) 다른 비동기 리셋 함수로 쓰기
aax
yieldContinuation(function*(){
var v1=yield function(k){
sendAjax({
url:'/',
success:k
});
};
console.warn(v1);
var v2=yield function(k){
sendAjax({
url:'/',
success:k
});
};
console.warn(v2);
});
이것은 실현
sendAjax
된 후에도 당연히 운행할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.