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()在这里会更好