javascript - 如何使用带有条件逻辑的 JavaScript Promise 并在返回之前存储到局部变量中?

标签 javascript promise

我想涉及更多的逻辑,而不仅仅是 return new Promise(...);来自一个函数。我不确定将 Promise 存储到变量中是否会改变其背后的“同步性”,因为我见过的每个示例都没有这样做。我还想将 Promise 存储到一个变量中,通常在最后返回,即使我不涉及条件,因为它似乎不利于调试,并且通常将所有逻辑都驻留在 return 语句中。

function doSomething(){
    var promise_var1;

    if (condition){
        //Do something async, like an AJAX call to an API
        setTimeout(function(){promise_var1 = Promise.resolve('a')}, 3000);
    }else{
        //Do something synchronous, like setting a default value
        promise_var1 = Promise.resolve('b');
    }    

    return promise_var1;
}

doSomething().then(function(value){console.log('c'+value)});

我目前正在获取

doSomething() is undefined

但是我尝试了各种方法,所以我可能在概念上误解了一些东西。

编辑:“重复”问题是询问如何处理 promise 内的条件。我问如何通过变量返回 promise (以实现 single exit )。这可能是不可能的,因为 JavaScript 是弱类型的,并且 Promise 变量返回与 Promise 返回可能表现不同,但如果有解决方案可以做到这一点,我更喜欢单退出而不是多次返回。

最佳答案

尝试这样写你的 promise 。

   function doSomething(condition){

        var promise_var1= new Promise(function(resolve, reject) {
            if(condition){
               //resolve after your async action
               setTimeout(resolve('a'), 3000);
            }else{   
              //resolve immediately
              resolve('b');
            }
        });


        return promise_var1;
    }

关于javascript - 如何使用带有条件逻辑的 JavaScript Promise 并在返回之前存储到局部变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48574486/

相关文章:

javascript - Rally:来自多个表的字段

javascript - 在 Puppeteer 中的 page.evaluate 内循环

jquery - 对 JQuery 的 promise 感到困惑

javascript - 如何进行条件 promise 链

javascript - 我可以触发并忘记 nodejs (ES7) 中的 promise 吗?

Javascript promise .catch仍然调用final变量.then

javascript - 排序表时 Bootstrap 工具提示消失

javascript - 如何用 Class CSS 覆盖内联 CSS?

javascript - 无法调用 props 子函数

javascript - 调用堆栈溢出,仅适用于小型数组对,我如何使其需要 10k 数组对?