[英]How do i get return value when i call this functions?
我需要為以下任務創建一個nodejs:
1) Get my public IP address. 2) Update my public IP Address on my freenom.com account, for my registered domain.
我有兩個腳本分開工作。
1)獲取我的公共IP(npm安裝請求):
'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
我嘗試聲明一個全局變量,並嘗試在我的第一個腳本(獲取公共IP)上將“ body”函數返回值傳遞給它,然后,調用第二個腳本,傳遞“ My_IP” var:
'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變量。 更新公共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);
});
}
IMO看起來,請求返回了Promise並在請求獲得響應之前調用setRecord嘗試:
'use strict';
const freenom = require("freenom-dns").init(user, pass);
const request = require('request');
let My_IP = "";
let user = "my@user_email.com";
let pass = "mypass";
const createRequest = () => {
request('http://api.ipify.org', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
My_IP = body;
setDns();
}
else {
console.log("Error "+response.statusCode);
}
})
};
const setDns = () => {
freenom.dns.setRecord("myregistereddomain.com", "A", My_IP , 3600)
.then(function(ret) {
console.log(ret)
})
.catch((err) => {
console.log(err);
});
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.