2016-09-29 73 views
2

我所试图做的是基本上如何从一个本身使用promise的函数返回promise?

function test() { 
getSomeValue().then(function (data) { 
    //process data 
}); 
} 

function getSomeValue() { 
//do some long process 
return new Promise(function (resolve, reject) { 
    resolve(result); 
}); 
} 

function getSomeOtherValue() { 
//do some long process 
return new Promise(function (resolve, reject) { 
    resolve(result); 
}); 
} 

功能测试调用返回一个承诺,然后对返回的数据一些计算功能。这部分工作正常。现在功能getSomeValue需要调用另一个函数,它也返回一个承诺。我如何退还getSomeValue的承诺,其中也等待getSomeOtherValue完成。

让我知道是否需要其他信息。

+0

你可以做链接,'。然后()。然后,()......' – Rayon

回答

1

你可以只连锁getSomeOtherValuegetSomeValue

function getSomeValue() { 
    //do some long process 
    return new Promise(function (resolve, reject) { 
     resolve(result); 
    }).then(getSomeOtherValue); 
} 

如果你想切换顺序则:

function getSomeValue() { 
    //do some long process 
    return getSomeOtherValue().then(function() { 
     return new Promise(function (resolve, reject) { 
      resolve(result); 
     });   
    } 
} 

然而,这仅仅是为了说明。你可以设计你的诺言,让您可以在更高层次上有效地把它们连:

function test() { 
    getSomeOtherValue() 
     .then(getSomeValue) 
     .then(function (data) { 
      //process data 
     }); 
} 
+0

实际上getSomeOtherValue()需要之前调用。我需要来自getSomeOtherValue()的数据,然后根据那个 –

1

等待getSomeOtherValue功能得到解决,你需要解决getSomeValue功能的承诺,从getSomeOtherValue返回的承诺功能。下面的代码应该有希望有意义

function test() { 
getSomeValue().then(function (data) { 
    //process data 
}); 
} 

function getSomeValue() { 
//do some long process 
return new Promise(function (resolve, reject) { 
    getSomeOtherValue().then(function (data) { 
     resolve(result); 
    });   
}); 
} 

function getSomeOtherValue() { 
//do some long process 
return new Promise(function (resolve, reject) { 
    resolve(result); 
}); 
} 
2

摆脱getSomeOtherValue值getSomeValue前,只需拨打getSomeOtherValue功能,然后再链与另一个函数来处理getSomeValue值,那么最后的结果返回给调用者(测试功能)

​​
+0

添加说明生成响应 – alpha

相关问题