【问题标题】:Returning a result from a function after a promise resolves在 promise 解决后从函数返回结果
【发布时间】:2016-10-03 21:57:24
【问题描述】:

所以我必须将一个简单的布尔值传递给库。为了获得要返回的值,我必须评估承诺的解决方案(它进行异步调用)。所以我有这样的事情:

import {funcThatReturnsPromise} from 'some-module';

function someFunc(someParam) {
   funcThatReturnsPromise(someParam).then(theResult => someOtherFunc(theResult));
} 

function someOtherFunc(someParam) {
   ....
   return true; // do some things and return a bool
}

问题是这返回了一个承诺,而不是布尔值。我不能(不分叉第三方项目)修改调用代码来处理承诺而不是布尔。我知道 Promise 的全部意义在于能够在没有嵌套的情况下处理异步调用,但在这种情况下,我需要同步处理事情。我不知道该怎么做。我已经查看了文档,但我没有看到这样做的方法。谁能在这里指出我正确的方向?

【问题讨论】:

  • 有点困惑。您希望同步处理异步调用吗?

标签: javascript rsvp.js


【解决方案1】:

处理 Promise 和异步代码可能会令人困惑,但关键是不要过度复杂化。不要尝试不发明轮子,尝试了解您的代码在此结构中的位置。

如果你想让一段代码在 Promise 解析后运行,那么它属于 .then 回调。听起来你有一半的代码在回调中,一半的代码在回调中。

稍微扩展您的代码,我假设您正在尝试做一些事情以达到以下效果;

function someFunc(someParam) {
   funcThatReturnsPromise(someParam).then(theResult => someOtherFunc(theResult));

   if(someOtherFunc(theResult)){
       alert('A RESULT!');
   }
} 

function someOtherFunc(someParam) {
   ....
   return true;
}

但是你应该做的是;

function someFunc(someParam) {
   funcThatReturnsPromise(someParam).then(theResult => {
       funcResult = someOtherFunc(theResult)
       if(funcResult){
           alert('A RESULT!')
       }
   });

} 

function someOtherFunc(someParam) {
   ....
   return true;
}

【讨论】:

    猜你喜欢
    • 2017-07-29
    • 2016-09-12
    • 2019-10-10
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 2012-12-19
    • 1970-01-01
    相关资源
    最近更新 更多