【问题标题】:Javascript: return fires before promise completesJavascript:在承诺完成之前返回火灾
【发布时间】:2013-03-25 11:47:27
【问题描述】:
function process(hugedirectory) {

        var title = hugedirectory.getTitleEachFile().then(function(caption){            
            console.log(caption);
            return caption;
        });


        return title;       
    }

我有一个调用此方法的 AJAX 调用,但现在它不会返回任何内容。

console.log(caption) 显示正确的预期值。但是,此方法结束时不会返回此值。

【问题讨论】:

  • 这不是使用 jquery。
  • 这就是异步函数的工作方式。异步调用产生的所有数据处理都必须使用回调函数进行
  • 你能举个例子吗?我不确定这是什么意思
  • 你对返回值做了什么

标签: javascript asynchronous promise


【解决方案1】:

由于process 使用异步函数调用,您无法从该方法返回值。

此类问题的解决方法是使用如下回调函数

function process(hugedirectory, callback) {
    hugedirectory.getTitleEachFile().then(function(caption){            
        console.log(caption);
        callback(caption)
    });
}

process(hugedirectory, function(title){
    //Do something with title
})

在此,我们将回调函数传递给 process,而不是从 process 返回标题,当异步调用完成时将调用该回调函数,并将生成的 title 值传递给回调函数。

【讨论】:

  • “由于进程使用异步函数调用,你不能从方法返回值”。这种说法是不正确的。对 Deferreds/Promises 的基本了解应该会让你重新考虑。
  • Arun,虽然您的解决方案完全没问题,但从函数返回承诺也是一种可行的方法。例如,函数可以像function process(hugedirectory) { return hugedirectory.getTitleEachFile(); } 一样简单,而与title 相关的所有内容都可以在标准阻塞代码process(hugedirectory).then(function(title) { console.log(title); }).then(function(title) { /*Do something with title*/ }); 中指定。我在这里坚持使用.then(),尽管.done()(一次或两次)会产生相同的效果。
猜你喜欢
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 2015-07-18
相关资源
最近更新 更多