Javascript 从网络请求中应答
我有以下代码Javascript 从网络请求中应答,javascript,node.js,dialogflow-es,Javascript,Node.js,Dialogflow Es,我有以下代码 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.Abst
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
时,它将不起作用,尽管那里的其他一切都可以工作
当我从外面呼叫它时,它工作得很好
如何解决此问题?对于执行异步操作的意图处理程序(例如获取回调的网络调用),必须返回承诺对象,以指示在返回结果之前需要等待承诺完成 现在还不清楚
ddg
对象是否可以返回承诺,但是您可以在回调中使用类似
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();
}
})
});
}
这很有效。多谢各位