初学者异步JS-我曾经使用过“;那么“;每次我都想要价值
beginner asynchronus JS - do i ever have to use "then" every time i want the value
我使用的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
回调尚未执行。
相关文章:
- JavaScript承诺-无法读取属性'那么'的未定义
- 带有CSS的数据属性就没那么有用了
- 如果 JS 中的函数是一流的,那么在定义它们之前允许调用它们是什么
- 如果图像标记是用javascript编写的,并且需要用户输入,那么图像不会随页面加载吗
- 初学者异步JS-我曾经使用过“;那么“;每次我都想要价值
- 如何在Meteor中使每个环境都不那么不同
- 如何让我的网站上的WEBP图像加载在morzilla firefox中有一个可能的解决方案吗?如果是,那么如何
- 替换内联并不像看上去那么简单
- 强制jQuery Deferred等待Ajax在“”中完成;那么“;处理程序
- 如何让我的条件陈述不那么难看
- 如果.htaccess文件中只写了一行代码,那么我所有的css和js都不起作用,如何修复它
- Rally App SDK 2.0:Ext.Element 方法“不可选择”并没有那么规范化
- 如果React.js是V,那么在MVC中,其他字母是什么
- 在Require.js中,如果Require()是一个函数,那么Require.config()是如何存在的
- 正则表达式使匹配不那么贪婪
- 我有一个mysql的输入文本字段.那么,如何通过ajax从数据库中输出json表呢
- 如果事件发生后插入了检查代码,那么$(document).ready()会被激发吗
- 未捕获的类型错误:无法读取属性'那么'使用Sweet Alert未定义的
- 如果statusCode不是200,那么从http调用返回什么类型的错误对象
- 如何使jslint不那么冗长