我认为我有了承诺的想法,因为它的名字说出来,我们可以或不可能得到回报。要访问已解析的值,我们需要在promise上调用。这是我的捕获。
我不想对结果做任何事情,我只想返回值,因为它是我正在开发的API函数。
我有两个这样的承诺:
var willWeGetConsumptions = new Promise(function(resolve, reject) {
var willWeGetPrices = new Promise(function(resolve, reject) {
和另一个消费者承诺:
var finalPromise = Promise.all([willWeGetConsumptions, willWeGetPrices]).then(function(values) {
我的想法是:
var finalPromise = Promise.all
返回,(调用解析时),虽然我不能。所有其他解决方案都指的是登录finalPromise.then(function(value) { console.log(value)});
我认为现在很清楚我想要一个返回值,而不需要进一步处理它。
上次修改 对于那些不理解的人。 显然,我不想用户(API的调用者)来处理Promise对象(即使我总是确保它已经解决)。
为什么上次编辑?因为我现在意识到这是一个更广泛的问题,就像复制一样。这是真的,问题是如何从异步函数返回。
答案 0 :(得分:0)
我认为你误解了Promises的概念。
From Promise.all mozilla Promise.all(iterable)方法返回一个Promise ,当可迭代参数中所有的promise都已解析或者iterable参数包含时,它会解析没有承诺。它拒绝承认拒绝的第一个承诺。
var promise1 = Promise.resolve(3);
var promise2 = 42;
var promise3 = new Promise(function(resolve, reject) {
setTimeout(resolve, 100, 'foo');
});
function returningAPromiseForLater (){
return Promise.all([promise1, promise2,
promise3]).then(function(values) {
console.log(values);
// Update not just logging.
whateverFunctionYouCall ( values );
});
// expected output: Array [3, 42, "foo"]
}
**INVOKING AN EXTERNAL FUNCTION**
function whateverFunctionYouCall ( array ) {
array.forEach(function(singleValue) {
// send data to DB
// create a File
}
}
**UPDATE 2: Getting the response later**
receiveThePromise = returningAPromiseForLater.then (function(valuesHEREasRESPONSE){
// do whatever with valuesHEREasRESPONSE variable.
});
答案 1 :(得分:0)
Promise.all()
是从承诺中重新承诺多个承诺的正确方法。您甚至可以在混音中添加一些同步值。
asyncFun = data => new Promise((v,x) => setTimeout(v, Math.random()*1000, data))
Promise.resolve(Promise.all([asyncFun(1), asyncFun(2), 3]))
.then(([v1,v2,v3]) => console.log(v1 ,v2 ,v3));