[英]return new Promise() not working in Node.js
我对 Promise 的概念以及一般的 JavaScript 都不熟悉。 我正在尝试在 Node.js 中编写一个函数,我可以将 URL 传递给结果的承诺。
我以两种方式对其进行了编程。 第一个不起作用,我可以将 URL 传递给函数。 第二个确实有效,其中 URL 是静态定义的。 第一个不起作用,因为编译器出于某种我无法弄清楚的原因认为它不是一个函数,为什么?
这种方式不起作用,因为函数getJson
不被 Node 解释为函数:
var options = { method: 'GET',
url: URL, // This will be dynamically filled by the argument to the function getJson
headers: { authorization: 'OAuth realTokenWouldBeHere', Accept: 'application/json' } };
var getJson = function(URL){
return new Promise(function(resolve, reject) {
request(options, function (error, response, body) {
if(error) reject(error);
else {
resolve(JSON.parse(body)); //The body has an array in the jason called Items
}
});
}); // Edited original post. Had two curly braces }}; here by accident, which was why function was not being recognized
};
getJson.then(function(result) {
console.log(result.Items); // "Stuff worked!"
}, function(err) {
console.log(err); // Error: "It broke"
});
这种方式行之有效,我将一系列物品返回到控制台。 这样做的缺点是使用的 URL 是静态的。 我想要做的重点是通过获取 API 的结果链接一堆 URL,一个 URL 调用然后包含 NextPage 结果的 URL。
var options = { method: 'GET',
url: 'http://staticURL',
headers: { authorization: 'OAuth realTokenWouldBeHere', Accept: 'application/json' } };
var getJson = new Promise(function(resolve, reject) {
request(options, function(err, response, body) {
if(err) reject(err);
else {
resolve(JSON.parse(body));
}
});
});
getJson.then(function(result) {
console.log(result.Items); // "Stuff worked!"
}, function(err) {
console.log(err); // Error: "It broke"
});
试试这个:
var getJson = function(URL){
var options = {
method: 'GET',
url: URL,
headers: { authorization: 'OAuth realTokenWouldBeHere', Accept: 'application/json' }
};
return new Promise(function(resolve, reject) {
request(options, function (error, response, body) {
if(error) reject(error);
else {
resolve(JSON.parse(body));
}
});
}};
};
然后你可以调用它:
getJson(theDynamicURLGoesHere).then(function(result) {
console.log(result.Items); // "Stuff worked!"
}, function(err) {
console.log(err); // Error: "It broke"
});
getJson.then(...)
在您的第一个代码块中是不正确的。 它必须是:
getJson(someURL).then(...)
因为在第一个代码块中, getJson
是一个函数,因此您必须调用它来执行它,并且需要向它传递所需的参数。
在您的第一个代码块中, getJson
是一个函数,它在您调用和执行该函数时返回一个承诺,因此您必须调用该函数才能获得该承诺。 在第二个代码块中, getJson 已经是一个 promise,因此您可以调用getJson.then(...)
。
getJson()
是一个函数,所以你需要用()
调用它:
getJson(URL).then(onFulfilled, onRejected);
需要注意的重要一点是,promise 是一个对象,您可以使用构造函数创建一个新的 promise 。 不要尝试将承诺用作函数 - 承诺立即开始执行, .then()
只是注册一个事件处理程序,以便在承诺更改状态时通知您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.