gpt4 book ai didi

javascript - JS odoo 10 中的函数返回 `undefined`

转载 作者:行者123 更新时间:2023-11-28 14:48:40 24 4
gpt4 key购买 nike

我尝试了下面的代码,但得到未定义

init: function(parent){
var value = this.read_data();
console.log('value',value);//Prints undefined
}

read_data: function() {
my_model.query(["name"]).all().then(function(data){
console.log('dataa',data);//Here print value
return data[0].name
});
},

我该如何解决这个问题?

最佳答案

您的read_data函数是异步的,它调用的函数不会立即返回某些内容,而是在一段时间后才会返回。因此,您不能只返回 read_data 中的值函数只是因为当函数完成时它还不存在。此外,您实际上没有从 read_data 返回任何内容。函数本身。

您调用my_model.query(["name"]).all()它显然返回一个 Promise,一个异步任务。完成该任务 ( .then(…) ) 后,您调用一个函数来注销数据并返回一个值。

到目前为止一切都很好,这使得整个事情返回一个 promise 本身,一个值 data[0].name 的 promise 。查询完成后。然而,这个 promise 永远不会被返回,所以你无法知道什么时候会发生。

要解决这个问题,只需从 read_data 返回整个内容即可。 :

read_data: function() {
// return the resulting promise here
// ↓↓↓↓↓↓
return my_model.query(["name"]).all().then(function(data){
console.log('dataa',data);//Here print value
return data[0].name
});
}

这使得read_data本身正确异步并使其返回结果的 promise 。所以现在你可以在你的init中消费这个 promise 。功能:

init: function(parent){
this.read_data().then(function (value) {
console.log('value', value);
});
}

read_data()返回一个 Promise,我们必须等待它的结果,并且只有在 Promise 得到解决后才能采取行动。为此,我们使用 .then(…) promise 完成之后再去做某事。

关于javascript - JS odoo 10 中的函数返回 `undefined`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45399745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com