gpt4 book ai didi

javascript - 调用此函数时如何获取返回值?

转载 作者:行者123 更新时间:2023-11-30 06:12:51 24 4
gpt4 key购买 nike

我需要为以下任务创建一个 nodejs:

1) Get my public IP address.2) Update my public IP Address on my freenom.com account, for my registered domain.

I have two script working separetly.

1) Getting my public IP (npm install request):

'use strict';
var request = require('request');
request('http://api.ipify.org', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
else {
console.log("Error "+response.statusCode);
}
})

// This print my public IP correctly

2) 在 freenom 帐户中更新我的 IP (npm install -g freenom-dns):

'use strict';
var user = "my@user_email.com";
var pass = "mypass";
var freenom = require("freenom-dns").init(user, pass);
freenom.dns.setRecord("myregistereddomain.com", "A", "12.12.12.12" , 3600)
.then(function(ret) {
console.log(ret)
})
.catch((err) => {
console.log(err);
});

// This update my new public IP on my freenom account as 12.12.12.12 correctly

我尝试声明一个全局变量,并尝试在我的第一个脚本(获取公共(public) IP)上将“body”函数返回传递给它,之后,调用我的第二个脚本,传递“My_IP”变量:

'use strict';

var My_IP = ""
var user = "my@user_email.com";
var pass = "mypass";

var freenom = require("freenom-dns").init(user, pass);
var request = require('request');

request('http://api.ipify.org', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
My_IP = body;
}
else {
console.log("Error "+response.statusCode);
}
})

freenom.dns.setRecord("myregistereddomain.com", "A", My_IP , 3600)
.then(function(ret) {
console.log(ret)
})
.catch((err) => {
console.log(err);
});

但是My_IP的类型不是String变量。更新公共(public) IP 函数,只允许字符串值作为参数。当我调用此函数时,如何获取“body”值?

最佳答案

My_IP 似乎是字符串变量。只是值是空的

您应该检查执行顺序。 request()是异步任务
它将通过回调函数返回数据

这是执行顺序

My_IP = ''
request(..., callback)
freenom.dns.setRecord(..., My_IP) // My_IP is still empty
callback() // My_IP is update here

你可以这样实现(或者使用 Promise、Async 函数等)

request('http://api.ipify.org', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
My_IP = body;
handler() // After My_IP was updated
}
else {
console.log("Error "+response.statusCode);
}
})

function handler () {
freenom.dns.setRecord("myregistereddomain.com", "A", My_IP , 3600)
.then(function(ret) {
console.log(ret)
})
.catch((err) => {
console.log(err);
});
}

关于javascript - 调用此函数时如何获取返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57880903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com