如何处理异步链接的承诺?

时间:2017-05-11 22:24:08

标签: javascript jquery promise

我有程序从电影数据库中提取数据。我编写了一个函数,它使用jQuery从api中提取数据,如下所示。

var get_details = function(url) {
    return new Promise(function(resolve, reject) {
        var xhr = new XMLHttpRequest();
        xhr.open('get', url, true);
        xhr.responseType = 'json';
        xhr.onload = function() {
            var status = xhr.status;
            if (status == 200) {
                resolve(this.responseText);
            } else {
                reject(status);
            }
        };
        xhr.send();
    });
};

我的主文件中有一个使用上述功能的路径。我使用链式承诺传递承诺的返回数据。代码如下。

app.get("/actor", function(req, res){ 
    var name = req.query.actor;
    var id_url = `http://api.tmdb.org/3/search/person?api_key=${api_key}&query=${name}`;
    var promise = data.get_details(id_url).then((data) => {
        var json = JSON.parse(data);
        var id = json.results[0].id;
        return id;
    }).then((id) => {
        var movie_url = `http://api.themoviedb.org/3/discover/movie?api_key=${api_key}&with_cast=${id}`;
        var x = data.get_details(movie_url);
        console.log(x);
        return x;
    }).then((content) => {
        console.log(content);
        //want to render this content
    });

    //console.log(main);
    var template = fs.readFileSync("./public/template.ejs", "utf8");
    //var rendered = ejs.render(template, {content});
    res.send(name);
});

我成功地能够提取数据,并在记录正确的输出时使用内容变量。我想在这个承诺之外使用这个内容,以便我可以在这行代码中使用它。

//var rendered = ejs.render(template, {content});

我目前收到错误"promise{<pending>}"。如何在承诺之外的内容中使用数据。

0 个答案:

没有答案