我正在使用异步的PouchDB,我是async的新手。
因此,如果我从pouchdb获取文档,我必须使用.then
来查看实际结果。多数民众赞成在我看来,但我每次想要这个价值时都要拨打.then
吗?
例如,我创建了一个SettingsService,我可以存储我的设置键/值样式。
// Get Setting
settingsService.get = function(key) {
return settingDB.get(key).catch(function (err) {
console.log(err);
});
};
当我想要获得设置时,我必须每次都进行这个大.then
块吗?
// Get Time of Last Sync
settingsService.get('lastSync').then(function (setting) {
$scope.lastSync = setting.value; // now it's assigned isn't it?
console.log(setting);
});
//edit, but this is still is undefined.. so again use then?
console.log($scope.lastSync);
现在,如果我想在代码中稍后再次使用相同的设置,我每次都要重复这个.then
的内容吗?
答案 0 :(得分:1)
是的,如果您尝试访问当前then
块之外的任何值,则需要then
。
// Get Time of Last Sync
settingsService.get('lastSync').then(function (setting) {
$scope.lastSync = setting.value;
console.log(setting);
// inside the then function, you can access the $scope.lastSync variable directly
});
您要对$scope.lastSync
执行的任何操作都必须在此函数内。否则,您甚至可以使用$scope.$watch(lastSync, function(newValue){})
来处理then
函数之外的内容。这将确保它在值更改后运行,并且再次类似于then
。
但在then
之外,您必须使用then
,因为您不知道该值何时会解决。
console.log($scope.lastSync);
之外的任何地方then
都会给你未定义的内容。您可以使用$timeout
来执行console.log,但无法保证何时可以使用该值。这完全取决于服务电话。
虽然你已经在当时分配了它,但then
将在服务调用成功的某个时间点执行。但是你要立即打印$scope.lastSync
的console.log。所以它仍然是undefined
因为then
回调尚未执行。