gpt4 book ai didi

javascript - 同步解析链接的 Angular Promise

转载 作者:行者123 更新时间:2023-11-28 14:44:19 24 4
gpt4 key购买 nike

我有一个使用 $q 服务的解析 promise 函数,其中有一些通用代码可以根据某些条件解析/拒绝。我有一个场景,只有在 api1 成功解析后我才必须执行 api2 。但这两个调用都是异步发生的。我在下面粘贴了伪代码。请帮忙。预先非常感谢。

var resolvePromise = function(promise)
{
var defer = $q.defer();
promise.then(function(response)
if(certain conditions are true)
{
defer.reject(err)
}
defer.resolve();
)
.catch(function(errors){
defer.reject(errors);
})

return defer.promise;
}

function synchronousCalls()
{
var promise1 = service.getApi1();
var promise2 = service.getApi2();

return resolvePromise(promise1).then(function(){
return resolvePromise(promise2);
})
}

function getData()
{
synchronousCalls().then(function(){
console.log("synchronous run of apis ended");
})
}

最佳答案

您不需要 resolvePromise 函数。让 getApi1getApi2 直接返回 Promise,您可以 .then()。此外,调用返回 Promise 的函数不会停止执行上下文。您将立即触发对这两个 API 的调用,而不是等待第一个 API 完成。您需要调用 getApi1().then() 应返回的 Promise 。考虑以下代码:

// This says, fire them both immediately
var promise1 = service.getApi1();
var promise2 = service.getApi2();

// Your call should look something like this
service
.getApi1()
.then(function (api1Response) {
// If I'm in here, I know that the request to service 1 is done
return service
.getApi2();
}).then(function (api2Response) {
// If I'm in here, I know that the request to service 2 is done
console.log(api2Response);
})
.catch(function (err) {
console.log("Something has gone wrong");
});

你们两个getApi函数应该看起来像这样某物,它们所做的主要事情是返回一些东西(比如Promise)一个 .then() 方法。

function getApi1() {
// This is returning a Promise
return $http
.get("some/resource/on/the/server.json")
.then(function (response) {
/*
* Here I'm just peeling out the data from the response
* because I don't actually care about the details of the
* response, just the data
*/
return response.data;
});
}

关于javascript - 同步解析链接的 Angular Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46960194/

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