Я новичок в Javascript async и Sails.js и чувствую, что неправильно понимаю некоторые концепции.
У меня есть функция, которая пытается сделать HTTP-вызов GET, чтобы получить комментарии от URL-адреса как JSON, а затем проанализировать эти комментарии, чтобы получить объект «Score» для оценки комментариев пользователей. Пример моего кода ниже -
fn: async function (inputs, exits) {
let commentsUrl = 'http://foobar.com';
// we want to return a score of the users comments
let score = {};
// callback function that calls a helper to score comments
let processComments = async function (error, result) {
let scored = await sails.helpers.scoreComments(result);
return scored;
}
let HTTP = require('machinepack-http');
// go get JSON data of user comments
HTTP.get({
url: commentsUrl,
data: {},
headers: {}
}).exec((err, result) => score = processComments(err, result)
);
// this should be awaiting for the processComments callback to finish?
return exits.success(score);
Моя проблема, вероятно, очевидна - функция возвращается непосредственно перед завершением выполнения обратного вызова, а значение показателя равно {}. Я попытался в парусе изменить вызов HTTP.get на -
// go get JSON data of user comments
HTTP.get({
url: commentsUrl,
data: {},
headers: {}
}).exec((err, result) => score = await processComments(err, result)
);
Но это приводит к скомпилированной ошибке, в которой говорится, что паруса не понимают ключевое слово 'await' перед обратным вызовом processComments.
Что я неправильно понимаю? Я хотел бы вернуть значение «scored» обратно в основную функцию и почувствовать, что должен что-то «ждать», но я не уверен, где.