吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1109|回复: 3
收起左侧

[求助] nodejs如何让require函数等待exports返回结果

  [复制链接]
sikro 发表于 2021-9-5 23:36
主程序中有一段代码

const notify = $.isNode() ? require('./sendNotify') : '';
const jdCookieNode = $.isNode() ? require('./jdCookie.js') : '';
let jdNotify = true;


jdCookie.js   请求一个对象存储中的文件,再把结果 exports  出来,赋给 jdCookieNode

jdCookie.js代码如下:

var COS = require('cos-nodejs-sdk-v5');
var cos = new COS({
  SecretId: '',
  SecretKey: ''
});
function getfile() {
  return new Promise((resolve, reject) => {
    cos.getObject({
      Bucket: 'scf-deploy-ap',
      Region: 'ap-beijing',
      Key: 'file_name',
    }, function (err, data) {
      console.log(err || data.Body.toString('utf8'));
      CookieJDs = JSON.parse(data.Body.toString('utf8')).pt;
      resolve(CookieJDs);
    }
    )
  })
};


(async () => {  
  await getfile()
  if (process.env.JD_COOKIE) {
    if (process.env.JD_COOKIE.indexOf('&') > -1) {
      console.log(`您的cookie选择的是用&隔开\n`)
      CookieJDs = process.env.JD_COOKIE.split('&');
    } else if (process.env.JD_COOKIE.indexOf('\n') > -1) {
      console.log(`您的cookie选择的是用换行隔开\n`)
      CookieJDs = process.env.JD_COOKIE.split('\n');
    } else {
      CookieJDs = [process.env.JD_COOKIE];
    }
  }
  CookieJDs = [...new Set(CookieJDs.filter(item => item !== "" && item !== null && item !== undefined))]
  console.log(`\n====================共有${CookieJDs.length}个京东账号Cookie=========\n`);
  console.log(`==================脚本执行- 北京时间(UTC+8):${new Date(new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + 8 * 60 * 60 * 1000).toLocaleString()}=====================\n`)
  for (let i = 0; i < CookieJDs.length; i++) {
    const index = (i + 1 === 1) ? '' : (i + 1);
    exports['CookieJD' + index] = CookieJDs[i].trim();
    console.log('导出', CookieJDs[i].trim())
  }
})();


现在测试的数据能正常exports出来,但是主程序一直不等待数据返回就继续执行导致后面的程序读取不到jdCookieNode   这个变量的值,谁知道如何解决?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

fankangfan 发表于 2021-9-6 09:10
可以考虑写一个函数,把异步代码用async await的方式变成同步代码
快乐小风 发表于 2021-9-6 10:17
2楼方法可以, 用aync await 同步调用 jdCookieNode 这个函数
libook7 发表于 2021-9-6 11:44
让这个模块返回一个async函数:
[JavaScript] 纯文本查看 复制代码
var COS = require('cos-nodejs-sdk-v5');
var cos = new COS({
    SecretId: '',
    SecretKey: ''
});
function getfile() {
    return new Promise((resolve, reject) => {
        cos.getObject({
            Bucket: 'scf-deploy-ap',
            Region: 'ap-beijing',
            Key: 'file_name',
        }, function (err, data) {
            console.log(err || data.Body.toString('utf8'));
            CookieJDs = JSON.parse(data.Body.toString('utf8')).pt;
            resolve(CookieJDs);
        }
        )
    })
};

module.exports = async () => {
    const cookies = {};
    await getfile()
    if (process.env.JD_COOKIE) {
        if (process.env.JD_COOKIE.indexOf('&') > -1) {
            console.log(`您的cookie选择的是用&隔开\n`)
            CookieJDs = process.env.JD_COOKIE.split('&');
        } else if (process.env.JD_COOKIE.indexOf('\n') > -1) {
            console.log(`您的cookie选择的是用换行隔开\n`)
            CookieJDs = process.env.JD_COOKIE.split('\n');
        } else {
            CookieJDs = [process.env.JD_COOKIE];
        }
    }
    CookieJDs = [...new Set(CookieJDs.filter(item => item !== "" && item !== null && item !== undefined))]
    console.log(`\n====================共有${CookieJDs.length}个京东账号Cookie=========\n`);
    console.log(`==================脚本执行- 北京时间(UTC+8):${new Date(new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + 8 * 60 * 60 * 1000).toLocaleString()}=====================\n`)
    for (let i = 0; i < CookieJDs.length; i++) {
        const index = (i + 1 === 1) ? '' : (i + 1);
        cookieIds['CookieJD' + index] = CookieJDs[i].trim();
        console.log('导出', CookieJDs[i].trim())
    }
    return cookies;
};


然后在外部require这个文件,找时机再调用:
[JavaScript] 纯文本查看 复制代码
const getJdCookie=require('./jdCookie.js');

// ……
// 某个地方需要开始读取Cookie,在async函数内:
const cookies=await getJdCookie();
// cookies的结构就是你原来想export出来的那个结构。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 22:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表