javascript - 使用 Promise 对象返回函数的值

标签 javascript node.js promise

<分区>

我正在编写一个使用 Promise 返回网页内容的 getWebContent 函数(我也在使用 Request 模块)。

我想使用此函数的方式是 var content = getWebContent(),这样 content 变量包含所请求网站的数据。我是这样开始的:

var request = require('request')

var getWebContent = function () {
    
    target = 'http://www.google.com';
    var result = null;
    var get = function (url) {
        return new Promise(function (resolve, reject) {
            function reqCallback(err, res, body) {
                if (err) reject(err);
                else resolve(body);
            };
            request(url, reqCallback);
        });
    };

    get(target).then(function (res) {
        result = res;
        console.log(res);
    });
    
    return result;
};

var goog = getWebContent();
console.log(goog)

但是,这段代码不起作用,因为在解析 Promise 对象之前,该函数返回 result 变量,该变量为 null。您能否告诉我应该如何修复我的代码以使其按预期工作?

最佳答案

无论如何你都需要使用 Promise。您无法通过 Javascript 中的异步操作生成同步结果。

var request = require('request')

var getWebContent = function () {

    target = 'http://www.google.com';
    var result = null;
    var get = function (url) {
        return new Promise(function (resolve, reject) {
            function reqCallback(err, res, body) {
                if (err) reject(err);
                else resolve(body);
            };
            request(url, reqCallback);
        });
    };

    return get(target);
};

var goog = getWebContent().then(function (res) {
  console.log(goog);  
});

关于javascript - 使用 Promise 对象返回函数的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42725584/

相关文章:

javascript - 在 Controller 中使用工厂返回未定义

javascript - 带有 HTML5 Canvas 的 putImageData 的掩码?

javascript - 避免带有 promise 的嵌套回调

javascript - javascript中文件名的分割

javascript - 去匿名化 jQuery 中的匿名函数

node.js - http.get请求循环关闭问题(Node)

javascript - 如何在 vanilla JS 中编写 async/await

javascript - 无法理解 ElectronJS 中 webContents 中的 `sendInputEvent `

node.js - 使用 Bot Framework 代表用户发送消息

javascript - 在 node.js 中的 for 循环后完成多个 writeFile 函数时解决 promise