2017-09-29 11 views
0

나는이 작업을 수행 할 수 :약속 안의 기능/반환을 중지하는 방법은 무엇입니까?

function save() { 
    //does some stuff here 

    somePromise.then(x => { 
    //do some stuff here 
    }).then(z => { 
    //return statement that makes you leave the function 
    }) 
} 

나는 기능을 가지고 있고 나는 약속 함께 일하고 있어요 때문에 다음 내부의 실행을 완료하는 수익을 갖고 싶어.

도움이나 조언을 주시면 대단히 감사하겠습니다. 미리 감사드립니다. return

function save() { 
    //does some stuff here 

    return somePromise.then(x => { 
    //do some stuff here 
    return /* value */ 
    }).then(z => { 
    //return statement that makes you leave the function 
    return /* value */ 
    }) 
} 
+0

이 기능의 목적은 무엇입니까? 함수를 일찍 나가려면 수익을 사용하고 있습니까? – evolutionxbox

+0

'save' 함수에서 돌아가시겠습니까? – alexmac

+0

당신의 사용 약속으로 본 나의 조언은 async/await를 사용합니다 .. – Keith

답변

1

사용)를 실행합니다 (당신은 이미 당신의 그 전에 저장() 함수를 왼쪽 것입니다. 그것은 그것에 기다리지 않습니다. 한 가지 해결책은 저장중인 콜백 함수를 매개 변수로 사용하여 대기중인 코드를 다시 호출 할 수 있도록하는 것입니다.

function save(callBack) { 
    //does some stuff here 

    somePromise.then(x => { 
    //do some stuff here 
    }).then(z => { 
    //return statement that makes you leave the function 
    callBack(); 
    }) 
} 

// example of code calling the save 
save(function() { 
    console.log("save is done running, do something here"); 
}); 
+1

이것이 왜 downvoted되었는지 잘 모르겠다. OP의 질문은 잘못 표현되어 있지만 대답이 내기에 있어야한다면, –

+0

@BenjaminGruenbaum이 대답을 향상 시키거나 삭제하기 위해 "downvote"에 대한 이유를 이전에 물어봤을 것입니다. ; 그래서 SO는 명시 적으로 "downvote"를 타당한 이유없이 권장하지만 https://meta.stackoverflow.com/questions/356706/moderator-deleting-comments-by-op – guest271314

+0

나는 다운 투표하지 않았습니다. 그러나 나는 조건부로 약속의 사슬에서 돌아올 수 있다고 해석했습니다. 이것은 항상 반환 할 것입니다 .. – Keith

-1

문제

+0

이것은 'somePromise'가 충족시키지 않고 거부하는 경우 어떻게됩니까? 'callBack'이 던져 버리면 어떻게됩니까? 잠재적 인 반환 값은 어떻습니까? 이미 약속이있는 경우 이와 같은 콜백을 수행 할 필요가 거의 없습니다. –

+0

좋은 점, OP가 실제로 달성하려고하는 것이 확실하지 않습니다. 모든 약속이 끝날 때까지 기다리는 것이면 $ .when()가 더 좋을 것입니다. –

-1

당신은 당신의 사용 약속으로 간주 확인 Promise

function save() { 
 
    //does some stuff here 
 
    return new Promise((resolve, reject) => { 
 

 
    
 
    somePromise.then(x => { 
 
    resolve("Something1") 
 
    }).then(z => { 
 
     //return statement that makes you leave the function 
 
     resolve("Something2") 
 
    }) 
 
    
 
    } 
 
} 
 

 
save().then(x => { 
 
    console.log(x); // x = something1 || something2 
 
})

0

을 반환하기 위해 save 기능을해야 할 수도 있습니다. 약속을 다룰 수있는 가장 좋은 기능 중 하나는 async/await이며 대부분의 최신 브라우저에는이 기능이 내장되어 있습니다. 오래된 브라우저를 타겟팅해야하는 경우 바벨 (babel)과 같은 것을 사용할 수 있습니다.

좋은 점은, 비동기 코드와 자바 스크립트를 계속 사용할 수 있습니다 그것은 동기 루프/반환/휴식을 위해 포함 .. 등 아래

예를 .. 것처럼

async function somePromise() { 
 
    console.log('Some promise called'); 
 
} 
 

 
async function earlyReturnTest(doEarly) { 
 
    await somePromise(); 
 
    if (doEarly) return; 
 
    console.log('Return not called'); 
 
} 
 

 
async function run() { 
 
    console.log('Without return'); 
 
    await earlyReturnTest(false); 
 
    console.log(''); 
 
    console.log('With return'); 
 
    await earlyReturnTest(true); 
 
} 
 

 
run();