我有以下代码
function search(agent){
var term = agent.parameters.searchphrase;
ddg.query( term, function( err, data ){
var answer = data.AbstractText;
var imageUrl = data.Image;
var source = data.AbstractSource;
var moreUrl = data.AbstractURL;
var heading = data.Heading;
console.log( answer );
agent.add( 'anything' );
console.log( 'smh' );
agent.add( answer );
agent.add( new Card( {
title: heading,
imageUrl: imageUrl,
text: answer,
buttonText: 'More about this',
buttonUrl: moreUrl
} )
);
agent.add( 'Answer provided by DuckDuckGo and ' + source );
} );
}
当我尝试从回调中调用 agent.add
时,它不会起作用,尽管其中的其他一切都有效。
当我从外部调用它时,它工作正常。
我该如何解决这个问题?
最佳答案
对于执行异步操作(例如获取回调的网络调用)的意图处理程序,您必须返回一个 Promise 对象以指示您需要等待 Promise 完成才能返回结果。
不清楚您的 ddg
对象是否可以返回 Promise,但是您可以使用类似的东西将 Promise 包装在回调中
function search(agent){
var term = agent.parameters.searchphrase;
return new Promise( function( resolve, reject ){
ddg.query( term, function( err, data ){
if( err ){
reject( err );
} else {
// Put the previous body of your callback here, concluding with...
resolve();
}
})
});
}
关于javascript - 从网络请求中回答,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54730806/