Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何正确解析bs typeahead的javascript承诺_Javascript_Angularjs_Promise_Grafana - Fatal编程技术网

如何正确解析bs typeahead的javascript承诺

如何正确解析bs typeahead的javascript承诺,javascript,angularjs,promise,grafana,Javascript,Angularjs,Promise,Grafana,我正在做一个项目来开发一个。这意味着我一直在使用一些AngularJS库/模块的老版本。Grafana项目也是如此,因此我正在努力研究如何尽可能使用本机承诺对象(承诺也是我的新手) 我得到了一个正确调用以下承诺的函数,该函数返回结果: getOptions(query) { console.log('Getting options') return this.datasource.metricFindQuery(query || '').then(a => { consol

我正在做一个项目来开发一个。这意味着我一直在使用一些AngularJS库/模块的老版本。Grafana项目也是如此,因此我正在努力研究如何尽可能使用本机承诺对象(承诺也是我的新手)

我得到了一个正确调用以下承诺的函数,该函数返回结果:

getOptions(query) {
  console.log('Getting options')
  return this.datasource.metricFindQuery(query || '').then(a => {
    console.log(a);
    this.scope.$digest();
    return a
  });
}
但是,bs typeahead下拉列表不会显示结果,尽管控制台中记录了显示预期结果的数组

使用
this.scope.$digest()
在函数中,我得到一个错误
$digest已在进行中
,因此现在我一直在思考应该在哪里/如何调用$scope.$digest(),或者这是否是最好的方法。如果删除该行,则不会出现错误,但不会显示任何结果

我已经看了一看,试图让这个工作,但迄今为止还没有任何成功

如果我将getOptions
return
替换为普通数组(例如
['a'、'b'、'c']
),则前瞻功能不会出现任何问题,因此我相信问题在于承诺

它看起来像是
$scope.$apply
,但我还是不确定它在代码库上下文中应该放在哪里

我应该做些什么才能得到承诺,根据未来的情况适当解决问题

上述函数所在的整个Javascript文件都可用


除了帮助我解决眼前的问题外,解释承诺在我的特定环境下如何解决,将有助于确保我正确理解这个概念。

您的typeahead似乎无法处理承诺

您必须手动提供一个数组,并在承诺得到解决后进行更新

getOptions(查询){
让结果=[];
console.log('获取选项')
this.datasource.metricFindQuery(查询| |“”)。然后(a=>{
控制台日志(a)
a、 forEach(item=>result.push(item));
});
返回结果;
}

您的typeahead似乎无法处理承诺

您必须手动提供一个数组,并在承诺得到解决后进行更新

getOptions(查询){
让结果=[];
console.log('获取选项')
this.datasource.metricFindQuery(查询| |“”)。然后(a=>{
控制台日志(a)
a、 forEach(item=>result.push(item));
});
返回结果;
}

如果
getOptions()
在返回数组时起作用,但在返回承诺时不起作用,则调用方不期望承诺。很可能,您需要修改调用者。如果
getOptions()
在返回数组时有效,但在返回承诺时无效,则调用者不期望承诺。很可能,您需要修改调用者。这似乎不起作用,大概是因为我在我的帖子中链接到的相同原因(也在这里:)。如果我在返回前将console.log()作为结果变量,那么它将在then()承诺的console.log()之前打印到控制台(请参阅),因此在函数返回之前,承诺似乎没有解析。
console.log
是正常的,因为then是异步调用的。但是一旦承诺得到解决,
结果
数组将被更新。此外,根据文档(),您应该在trueThis上设置属性“watchOptions”,这似乎不起作用,大概是因为我在文章中链接到的相同原因(也在这里:)。如果我在返回前将console.log()作为结果变量,那么它将在then()承诺的console.log()之前打印到控制台(请参阅),因此在函数返回之前,承诺似乎没有解析。
console.log
是正常的,因为then是异步调用的。但是一旦承诺得到解决,
结果
数组将被更新。此外,根据文档(),您应该将属性“watchOptions”设置为true