我在一个使用电子的小项目中使用 elasticsearchjs。但不知何故,我遇到了一些奇怪的东西,阻碍了我。
在 Electron 中,我有一个按钮,点击时会触发一个功能:
<button onclick="someFunction()">Click Me</button>
以及以下 Javascript:
import elasticsearch from 'elasticsearch'
function someFunction () {
console.log('hello world')
let es = new elasticsearch.Client({
host: 'http://127.0.0.1:9200',
log: 'trace'
})
es.ping().then(response => {
console.log(response) // Does not enter, promise is rejected
})
}
我可以看到hello world
输出,但不知何故弹性搜索功能不起作用,我收到超时错误...
但是,如果我对函数的调用加倍,并向 elasticsearch API 添加一个异步调用,它就可以工作,并且我进入了两个then()
调用:
import elasticsearch from 'elasticsearch'
function someFunction () {
console.log('hello world')
let es = new elasticsearch.Client({
host: 'http://127.0.0.1:9200',
log: 'trace'
})
es.ping().then(response => {
console.log(response) // promise resolves once the second one is resolved
})
setTimeout(() => {
es.ping().then(response => {
console.log(response) // resolves
})
}, 500)
}
如果我只放这个setTimeout()
函数,它也不起作用,就像我需要调用两次函数才能让它工作一样。
我尝试了一个真正的节点脚本,代码运行良好:
let elasticsearch = require('elasticsearch')
let es = new elasticsearch.Client({
host: 'http://127.0.0.1:9200',
log: 'trace'
})
es.ping().then(response => {
console.log(response) // true
})
Electron 功能可能会阻止我的代码工作,我会错过什么?
谢谢大家的热心回复,祝您有美好的一天。
编辑:这是详细的错误和堆栈跟踪:
Uncaught (in promise) StatusCodeError {status: undefined, displayName: "RequestTimeout", message: "Request Timeout after 3000ms", body: false, stack: "Error: Request Timeout after 3000ms
at /home/j…_modules/elasticsearch/src/lib/transport.js:383:7"}body: falsedisplayName: "RequestTimeout"message: "Request Timeout after 3000ms"status: undefinedstack: "Error: Request Timeout after 3000ms
at /home/johndoe/Code/elastic-ui/node_modules/elasticsearch/src/lib/transport.js:354:15
at /home/johndoe/Code/elastic-ui/node_modules/elasticsearch/src/lib/transport.js:383:7"__proto__: ErrorAbstract