簡體   English   中英

如何將 promise object 中返回的 JSON object 分配到全局變量中?

[英]How to assign a JSON object returned inside a promise object into a global variable?

var mongoose = require('mongoose');
var Schema = mongoose.Schema;


const NewsAPI = require('newsapi');
const { response } = require('express');
const newsapi = new NewsAPI();

var current_date = new Date(Date.now());
var old_date = new Date(Date.now() - 864e5 - 864e5);

var current_date2 = JSON.stringify(current_date);
var old_date2 = JSON.stringify(old_date);

var today = current_date2.slice(1,11);
var day_b4_yesterday = old_date2.slice(1,11);

var feed;
newsapi.v2.everything({
    q: 'food and beverage',
    sources: '',
    domains: '',
    from: day_b4_yesterday,
    to: today,
    language: 'en',
    sortBy: 'relevancy',
    page: 2
}).then(response => {
    console.log(response);
    feed = response;

    

});


var NewsSchema = new Schema(feed);
module.exports = mongoose.model('News', NewsSchema);

我需要將由 newsapi 創建的 JSON object 的響應分配給全局變量,以便在新架構中使用它。 我怎么做? 截至目前,我無法在全球范圍內訪問它。

我已按如下方式更改了我的代碼,現在我可以訪問它,但現在我收到了架構配置錯誤。

var mongoose = require('mongoose');
var Schema = mongoose.Schema;


const NewsAPI = require('newsapi');
const { response } = require('express');
const newsapi = new NewsAPI('87ca7d4d4f92458a8d8e1a5dcee3f590');

var current_date = new Date(Date.now());
var old_date = new Date(Date.now() - 864e5 - 864e5);

var current_date2 = JSON.stringify(current_date);
var old_date2 = JSON.stringify(old_date);

var today = current_date2.slice(1,11);
var day_b4_yesterday = old_date2.slice(1,11);


NewsLibrary = function(correct){
    var promise = new Promise(function(resolve, reject){
        if (correct){
            newsapi.v2.everything({
                q: 'food and beverage',
                sources: '',
                domains: '',
                from: day_b4_yesterday,
                to: today,
                language: 'en',
                sortBy: 'relevancy',
                page: 2
            }).then(response => {
                resolve(response);
            })
        }else{
            reject(new Error("Error loading news"))
        }
        

    });

    return promise;
}

NewsLibrary(true).then(function(response){
    console.log(response);
    var NewsSchema = new Schema(response);
    module.exports = mongoose.model('News', NewsSchema);
}).catch(function(err){
    console.log(err)
});

您采用了全局變量feed 但是您將響應存儲在window.feed中。 所以你應該把它存儲在then塊的feed變量中,這是第一件事。

您可以使用 global 或 GLOBAL 來分配它,nodejs 支持這兩者:

global.feed = 響應;

或者

GLOBAL.feed = 響應;

我認為主要問題是因為該方法是異步的。

var NewsSchema = new Schema(feed);

此代碼應僅在請求完成后才有效。 但我認為它會在請求完成之前運行,因為它是在 promise ( then語句)之外給出的。

理想情況下,您應該從此方法返回 promise 或 function ,它將返回正確的值並在導入它的模塊中處理 promise。 一個例子是,


var model = newsapi.v2.everything({
    q: 'food and beverage',
    sources: '',
    domains: '',
    from: day_b4_yesterday,
    to: today,
    language: 'en',
    sortBy: 'relevancy',
    page: 2
}).then(response => {
    console.log(response);
    var NewsSchema = new Schema(response);
    return mongoose.model('News', NewsSchema);
});


module.exports = { model };

您可以在需要此的文件或方法中處理此 promise 的分辨率。 如果對更多異步代碼感興趣, 請查看 MDN web 文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM