在“then”分支后返回main函数的promise变量

时间:2017-05-02 17:04:44

标签: javascript asynchronous

我有以下代码段。它有一个函数fn1,用于定义promise变量。 promise存储承诺对象fn2返回。我在then对象上调用promise,最后返回promise

function fn1() {
    var promise = fn2(a, b);
    promise.then(function() {
        console.log('handling then');
        console.log('doing something');
    });
    return promise;
}

由于then分支是异步代码,我的理解是当内部函数异步时外部函数也以异步方式运行。但问题是在promise内的代码完成之前返回then对象。

我尝试在promise内返回then对象,如下所示。但这不会返回promise内定义的fn1

function fn1() {
    var promise = fn2(a, b);
    promise.then(function() {
        console.log('handling then');
        console.log('doing something');
        return promise;
    });
}

请帮忙,我该如何解决这个问题。谢谢。

2 个答案:

答案 0 :(得分:0)

你想这样做:

function fn1() {
  var promise = fn2(a, b);
  return promise
}

fn1().then(function () {
  console.log('handling then');
  console.log('doing something');
});

或者你可以这样做:

fn2(a, b).then(() => { /* do something */ })

答案 1 :(得分:0)

  

但问题是在内部代码完成之前返回了promise对象。

那么你的异步概念是有缺陷的。 Async 阻止执行。 promise是表示挂起操作的对象。您知道该操作是否完成,您需要知道的是什么。你将回调附加到承诺,知道它是否确实。

您似乎要做的是知道fn2是否通过fn1完成,并在此过程中进行处理。

function fn1() {
    return fn2(a, b).then(function() {
      console.log('handling then');
      console.log('doing something');
    });
}

fn1.then(function(){
  // fn2 completed, fn1 completed handling
});