【问题标题】:How do you return inside a promise?你如何在承诺中返回?
【发布时间】:2014-03-06 17:55:22
【问题描述】:

我开始自学 javascript,但无法从 Promise 中的函数返回。我的代码基本上是这样的:

foobar = function(x,y){
    //code that doesn't matter
    return promiseFunction(
        function(results){
           console.log("promise completed")
           console.log(output)
           return output;}
        function(err){throw error;});

console.log(foobar('1','2'));

这会打印出来

undefined
promise completed
what I want the result to be

我是异步编程的新手,不确定自己做错了什么。

【问题讨论】:

    标签: javascript asynchronous promise


    【解决方案1】:

    你不会在承诺中return。您在完成后链接另一个任务 - 获取完成链接任务的新承诺:

    function foobar(x,y){
        // Assuming that promiseFunction does return a promise
        return promiseFunction().then(function(results){
             console.log("promise completed")
             console.log(output)
             return output;
        }, function(err) {
             throw error;
        });
    }
    foobar('1','2').then(function(output) {
        console.log(output);
    })
    

    如果promiseFunction 尚未返回承诺,请查看this section of the Q documentation 了解如何为一些示例和模式构造承诺。

    【讨论】:

    • 如果我调用 foobar('1','2').then... 我得到“TypeError: Cannot call method 'then' of undefined”。这大概意味着 foobar('1','2') 不返回承诺?环顾四周,将 promiseFunction()... 包装在 $.ajax() 中应该可以解决这个问题。如何将 jquery 添加到一个 javascript 文件中?没有 HTML 文件。
    • 嗯,我发布的函数确实 return 是一个承诺。 promiseFunction 是否返回 $.ajax 的结果?如果您还没有使用 jQuery,则最好使用不同的库。你如何在没有 HTML 的情况下执行脚本?在这样的环境中可能存在某种importrequire
    【解决方案2】:

    异步函数不返回(或至少不可靠)。当你从你的异步函数中得到一个值时,console.log 已经运行了它所拥有的(在这种情况下,什么都没有,或者undefined)。这是我刚开始学习时快速而艰难地学到的一课。如果您希望在异步函数之后发生某些事情,则必须在异步函数内部调用它。

    有关更多信息和建议,请参阅线程 How to return the response from an AJAX call?

    【讨论】:

    • 所以 foobar('1','2') 正在返回输出,但 console.log 在 foobar('1','2') 有机会返回之前打印 'undefined'?
    • @user1231120 - 宾果游戏!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多