약속, 추가 매개 변수를 전달한 다음 연결
예를 들어 약속 :
var P = new Promise(function (resolve, reject) {
var a = 5;
if (a) {
setTimeout(function(){
resolve(a);
}, 3000);
} else {
reject(a);
}
});
우리가 호출 한 후 프라 미스에 대한 메소드 :
P.then(doWork('text'));
doWork 함수는 다음과 같습니다.
function doWork(data) {
return function(text) {
// sample function to console log
consoleToLog(data);
consoleToLog(b);
}
}
약속 및 텍스트 매개 변수에서 데이터에 액세스하기 위해 doWork에서 내부 함수를 반환하지 않으려면 어떻게해야합니까? 내부 기능을 피하는 트릭이 있습니까?
다음 Function.prototype.bind
과 같이 첫 번째 인수에 값이 전달 된 새 함수를 만드는 데 사용할 수 있습니다.
P.then(doWork.bind(null, 'text'))
다음으로 변경할 수 있습니다 doWork
.
function doWork(text, data) {
consoleToLog(data);
}
이제, text
실제로 것 'text'
에 doWork
와 data
약속에 의해 해결 값이됩니다.
참고 : 약속 체인에 거부 처리기를 연결했는지 확인하십시오.
작업 프로그램 : Babel의 REPL에 대한 라이브 카피
function doWork(text, data) {
console.log(text + data + text);
}
new Promise(function (resolve, reject) {
var a = 5;
if (a) {
setTimeout(function () {
resolve(a);
}, 3000);
} else {
reject(a);
}
})
.then(doWork.bind(null, 'text'))
.catch(console.error);
아마도 가장 간단한 대답은 다음과 같습니다.
P.then(function(data) { return doWork('text', data); });
Or, since this is tagged ecmascript-6
, using arrow functions:
P.then(data => doWork('text', data));
I find this most readable, and not too much to write.
Use currying.
var P = new Promise(function (resolve, reject) {
var a = 5;
if (a) {
setTimeout(function(){
resolve(a);
}, 3000);
} else {
reject(a);
}
});
var curriedDoWork = function(text) {
return function(data) {
console.log(data + text);
}
};
P.then(curriedDoWork('text'))
.catch(
//some error handling
);
Lodash offers a nice alternative for this exact thing.
P.then(_.bind(doWork, 'myArgString', _));
//Say the promise was fulfilled with the string 'promiseResults'
function doWork(text, data) {
console.log(text + " foo " + data);
//myArgString foo promiseResults
}
Or, if you'd like your success function to have only one parameter (the fulfilled promise results), you can utilize it this way:
P.then(_.bind(doWork, {text: 'myArgString'}));
function doWork(data) {
console.log(data + " foo " + this.text);
//promiseResults foo myArgString
}
This will attach text: 'myArgString'
to the this
context within the function.
참고URL : https://stackoverflow.com/questions/32912459/promises-pass-additional-parameters-to-then-chain
'developer tip' 카테고리의 다른 글
서비스 시작을위한 Android onCreate 또는 onStartCommand (0) | 2020.09.07 |
---|---|
async / await와 함께 RestSharp를 사용하는 방법 (0) | 2020.09.07 |
C #으로 MS Exchange 이메일 읽기 (0) | 2020.09.07 |
.h 파일에는 무엇을 넣어야합니까? (0) | 2020.09.07 |
자바 스크립트 forEach 메소드는 어떤 용도로 사용됩니까 (그 맵은 할 수 없음)? (0) | 2020.09.07 |