gpt4 book ai didi

javascript - 在 Node 中,使用 Q 使 2 个函数并行工作,但只等待第一个函数履行其 promise

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:09 24 4
gpt4 key购买 nike

在我的环境中,我使用node +q(我不是这方面的专家),所以主要论点是:promise。

我有一个函数需要并行执行两个操作,一个很长的操作和一个很短的操作。

var parallelWrapper = function(input) {
var deferred = Q.defer();
var fastPromise = fastComputation()
.then(function(data) {
deferred.resolve(data)
},
function(err) {
deferred.reject(err)
});
// of course this one below is not going to work properly
var slowPromise = slowComputation()
.then(function(data) {
makeSomething();
})
.then(function(data) {
makeSomethingElse();
})
.fail(function(err) {
console.log(err);
});

Q.all([fastPromise, slowPromise]);

retrun deferred.promise;
}

该函数将在 Promise 链中调用,因为需要第一个操作的结果,而不需要第二个操作的结果。

var myLongChainOfFunctions = function() {
var deferred = Q.defer();

firstFunction(someParams)
.then(secondFunction)
.then(thirdFunction)
/*...*/
.then(parallelWrapper)
.then(someFunction(data){
/* Do Something with the data returned only by fastPromise*/
}
/*...*/
.then(lastFunction)
.fail(doSomething)

return deferred.promise;

}

我想做的是让它们并行进行,但在 fastPromise 完成后立即解决,以便链式 Promise 可以向前推进,但显然在未来的某个时刻我也希望 SlowPromise 完成。所以我只是希望 SlowPromise 过它的生活,做它必须做的事情,不要太在意成功或失败。

我的印象是,Q 是不可能的,但也许有一个我没有发现的解决方案。

最佳答案

我会这样做:

var parallelWrapper = function(input) {

var fastPromise = fastComputation();

var slowPromise = slowComputation()
.then(function(data) {
return makeSomething();
})
.then(function(data) {
return makeSomethingElse();
}).catch(console.error);

return Q([fastPromise, slowPromise]).all();
}

第二个例子是这样的:

var myLongChainOfFunctions = function() {

return firstFunction(someParams)
.then(secondFunction)
.then(thirdFunction)
/*...*/
.then(parallelWrapper)
/*...*/
.then(lastFunction)
.catch(doSomethingWithError)

}

好的,你可以这样做:

var parallelWrapper = function(input) { 
slowComputation()
.then(function(data) {
return makeSomething();
})
.then(function(data) {
return makeSomethingElse();
}).catch(console.error);

return fastComputation();
}

关于javascript - 在 Node 中,使用 Q 使 2 个函数并行工作,但只等待第一个函数履行其 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28370994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com