我有以下代码。
我尝试进行API调用(检索),传递since(obj.since),因此,每次我进行调用时,API都不会检索所有数据。然而,到目前为止,我还没有找到从数据库上的最后一条记录中获取since的方法。
var express = require("express");
var article = require("../models/article");
var request = require('request');
article.findOne({}, {since:1, _id:0}, { sort: { 'since' : -1 } }, function (err,obj) {
var **dataString** = `'{"consumer_key":"XXXXX", "access_token":"XXXXXXX", "since":"${obj.since}"}'`;
});
var options = {
url: 'https://xxxxxxxxx.com/v3/get',
method: 'POST',
headers: headers,
body: **dataString**
}
function callback(error, response, body) {
if (!error && response.statusCode == 200) {
let package = JSON.parse(body);
for(var attributename in package.list){
var title = package.list[attributename]["given_title"] ;
var url = package.list[attributename]["given_url"] ;
var newArticle = {title: title, url: url, since: since}
article.create(newArticle, function(error, newlyCreated){
if(error){
console.log(error);
} else {
console.log(newlyCreated);
}
});
}
}
else {
console.log(error);
}
};;
request(options,callback)
如何通过API调用从数据库(MongoDB)获取obj.since并将其传递给对象(选项)?
2条答案
按热度按时间dnph8jn41#
你正在for循环中执行异步回调风格的操作,这导致了这个问题。我会改变一些事情
findOne
更改为在末尾有exec
,以便它返回promisearticle.create
已经返回了一个承诺,如果没有指定回调。for..of
循环进行异步操作。代码如下所示
然后可以调用
perform
函数。可能会有一些语法错误,但你会得到一个想法。oknwwptz2#
我有一个基于API响应数据多次调用相同API的问题。我是如何做的解释如下,请检查是否适合你
https://deepuvijayan.wordpress.com/2023/06/08/js-making-repeated-api-call-based-on-api-response/
https://deepuvijayan.wordpress.com/2023/06/10/js-making-repeated-api-call-based-on-api-response-method-2/