Для обработчиков намерений, которые выполняют асинхронные операции (например, сетевой вызов, который получает обратный вызов), вы должны вернуть объект Promise, чтобы указать, что вам нужно дождаться завершения обещания, прежде чем возвращать результаты.
Неясно, может ли ваш 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();
}
})
});
}