初学者异步JS-我曾经使用过“;那么“;每次我都想要价值

beginner asynchronus JS - do i ever have to use "then" every time i want the value

本文关键字:那么 曾经 异步 初学者 JS-      更新时间:2023-09-26

我使用的PouchDB是异步的,我是异步的新手。。

因此,如果我从pouchdb获得一个Doc,我必须使用.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的东西吗?

是的,如果您试图访问当前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回调尚未执行。