gpt4 book ai didi

javascript - 如何在AngularJS或Javascript中实现类似C#的await的功能?

转载 作者:行者123 更新时间:2023-11-28 13:21:14 25 4
gpt4 key购买 nike

我正在开发一个项目,该项目要求我让我的用户能够使用 Google 登录,而我正在使用 Google API 客户端(可以在 here 找到该项目的引用)。

现在我的代码是这样的。

文件:services/auth-service.js

angular.module('myApp')
.factory('gapi', function ($q) {

var auth2;

gapi.load('auth2', function () {
auth2 = gapi.auth2.init({
client_id: '649922003965-ni9e6nad25dh3ejoll70va550kt7cu5u.apps.googleusercontent.com'
});
});

return {
isSignedIn: function () {
return auth2.isSignedIn.get();
}
}
});

文件:controllers/dashboard.js

angular.module('myApp')
.controller('DashboardCtrl', function (gapi) {
alert(gapi.isSignedIn());
});

现在的问题是,当alert()命令在dashboard.js文件中运行时,到那时auth2还没有加载(因为我猜它是通过互联网从Google API加载的)因此我收到一个错误isSignedIn 无法取消未定义。

所以我理想地需要的可能是类似 C# 的等待函数,它等待返回值并调用它的方法。任何解决方案将非常感激。我花了几个小时尝试 promise 和其他方法,但我无法让其中任何一个发挥作用。

更新:您的大多数答案都适用于上述场景。让我们尝试一下这个更复杂的场景,应该首先提到。 (对此感到抱歉)。

文件:scripts/app.js

.state('main', {
url: '/admin',
abstract: 'true',
templateUrl: 'views/main.html',
resolve: {
check: function ($q, auth) {
if(!auth.isSignedIn())
{
$q.reject({authenticated: 'false'});
}
}
}
})
.state('admin', {
url: '',
parent: 'main',
templateUrl: 'views/admin.html'
})

现在,如果我在这里使用 Promise,Angular 将不会等待 Promise 得到解决。它会简单地加载 View ,并且在加载 View 后调用 $q.reject 将没有用。

最佳答案

您可以通过以下方式使用 Promise 来实现此目的:

文件:services/auth-service.js

angular.module('myApp')
.factory('gapi', function ($q) {

var auth2;
var isSignedInDeferred = $q.defer();

gapi.load('auth2', function () {
auth2 = gapi.auth2.init({
client_id: '649922003965-ni9e6nad25dh3ejoll70va550kt7cu5u.apps.googleusercontent.com'
});
isSignedInDeferred.resolve(auth2.isSignedIn.get());
});

return {
isSignedIn: function () {
return isSignedInDeferred.promise;
}
}
});

文件:controllers/dashboard.js

angular.module('myApp')
.controller('DashboardCtrl', function (gapi) {
gapi.isSignedIn().then(isSigned) {
alert(isSigned);
}
});

只需更改 isSignedIn 函数以返回 promise 并在获得值时解决该 promise 。

关于javascript - 如何在AngularJS或Javascript中实现类似C#的await的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32889663/

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