我有以下两个函数,一个函数调用另一个函数,但记录变量未定义,随后出现错误。我不知道为什么脚本不等待。似乎只是使用未定义的变量。
async function searchRecord(recordID) {
client.search({
index: 'records',
type: 'record',
body: {
query: { match: { _id: recordID } }
}
}).then(result => {
return result
}).catch(error => {
console.log(error)
return []
})
}
function test(jsonRecord) {
const userID = jsonRecord.users[0]
searchRecord(jsonRecord.objectID).then(record => {
if (record.length === 0) {
record = jsonRecord
}
})
}
我得到的错误是: UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“ length”
答案 0 :(得分:2)
这是异步的,请尝试使用await
。
async function searchRecord(recordID) {
try {
const result = await client.search({
index: 'records',
type: 'record',
body: {
query: {
match: { _id: recordID }
}
}
});
return result;
} catch (error) {
console.log(error);
return [];
}
}
答案 1 :(得分:1)
尝试将searchRecord
更新为return
:
async function searchRecord(recordID) {
return client
.search({
index: "records",
type: "record",
body: {
query: {
match: { _id: recordID },
},
},
})
.then((result) => {
return result;
})
.catch((error) => {
console.log(error);
return [];
});
}
答案 2 :(得分:0)
函数#include <studio.h>
int main()
{
int num;
while(1)
printf("Enter the number");
scanf("%d",num);
printf("Your number is %d", num);
return 0;
}
返回一个Promise。您可以选择从client.search()
退还该承诺。然后,在searchRecord()
函数中处理catch
。
或者,您也可以通过实现try catch块来处理test()
内部的错误。但是在这种情况下,关键是要等searchRecord()
完成后再从client.search()
返回。
searchRecord()
我得到的错误是:UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性'length'
这样做的原因是function searchRecord(recordID) {
return client.search({
index: 'records',
type: 'record',
body: {
query: { match: { _id: recordID } }
}
});
}
function test(jsonRecord) {
const userID = jsonRecord.users[0]
searchRecord(jsonRecord.objectID).then(record => {
if (record.length === 0) {
record = jsonRecord
}
}).catch(error => {
console.log(error)
return []
})
}
返回的诺言立即解析为searchRecord()
。函数undefined
中没有return语句。
答案 3 :(得分:-1)
为什么不使用Promise
?如果您想像上述答案一样使用async-await
可以,但是使用Promise
变得非常简单
function searchRecord (recordID) {
return new Promise((resolve, reject)=>{
client.search({
index: 'records',
type: 'record',
body: {
query: {
match: { _id: recordID }
}
}
}).then(
result => resolve(result)
).catch(
error => {console.log(error);reject());
});
}
function test (jsonRecord) {
const userID = jsonRecord.users[0]
searchRecord(jsonRecord.objectID)
.then(
record => {
if (record.length === 0) {
record = jsonRecord
}
}
)
}