Javascript 如何停止承诺中的函数/返回?
我想这样做:Javascript 如何停止承诺中的函数/返回?,javascript,asynchronous,promise,return,Javascript,Asynchronous,Promise,Return,我想这样做: function save() { //does some stuff here somePromise.then(x => { //do some stuff here }).then(z => { //return statement that makes you leave the function }) } 我有一个函数,我希望有一个返回,它将在一个时间内完成它的执行,因为我正在处理承诺 任何帮助或建议都将不胜感激。提前感谢。
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 */
})
}
问题是,在运行then()之前,您已经离开了save()函数。它不等待它。一种解决方案可能是让save将回调函数作为参数,这样就可以回调正在等待的代码
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");
});
您可能需要使用
save
函数返回Promise
函数保存(){
//这里有东西吗
返回新承诺((解决、拒绝)=>{
一些承诺。然后(x=>{
解决(“某件事1”)
}).然后(z=>{
//使您离开函数的return语句
决心(“某事2”)
})
}
}
save()。然后(x=>{
console.log(x);//x=something1 | | something2
})
好的,被视为使用承诺。使用承诺的最佳功能之一是async/await
,大多数现代浏览器甚至都内置了这一功能,如果您需要针对较旧的浏览器,可以使用类似babel的功能
很好的一点是,您可以继续将Javascript与异步代码一起使用,就像它是同步的一样,包括循环/返回/中断..等等
下面的例子
异步函数somePromise(){
log('somepromise called');
}
异步函数earlyReturnTest(doEarly){
等待承诺;
如果(不早)返回;
log('Return not called');
}
异步函数run(){
console.log(“不返回”);
等待earlyReturnTest(错误);
控制台日志(“”);
log('With return');
等待earlyReturnTest(真);
}
run();这样做的目的是什么?是否使用return提前离开函数?是否要从
save
函数返回?我的建议被视为使用承诺,使用async/wait..没有“离开函数”的概念。承诺回调无论如何只能执行异步。听起来你真的想返回承诺链。我想早点离开函数,以防出现错误。我不知道为什么会被否决,OP的问题措词不当,但如果我不得不打赌答案会是这样,@BenjaminGruenbaum以前会问这个问题e原因是“否决票”,以改进或删除答案;尽管如此,明确鼓励“否决票”没有合理的理由,我从来没有投过反对票。但我把它解释为能够从承诺链有条件地返回。这将始终返回..@Keith Yes,首先返回函数调用中的值,然后返回中的值。然后()
。问题代码根本不会从save()返回值
函数调用,另请参见,这比另一个答案糟糕得多-如果somePromise
没有实现但拒绝了怎么办?如果回调
抛出怎么办?潜在的返回值怎么办?如果你已经有了承诺,你几乎不需要这样做回调。好的方面,我不确定OP是什么实际尝试完成。如果是等待所有承诺都完成,那么$.when()在这里会更好