Я знаю, что для примитивного типа данных передача по ссылке не работает в javascript, поэтому обходным путем является обернуть их в объект. Но рассмотрим сценарий, в котором начальное состояние переменной равно null
, а затем переменной присваивается значение Object
. Теперь, если эта переменная передается в качестве аргумента внешней функции, она будет передана как ссылка или в конечном итоге окажется undefined
внутри функции.
Для справки рассмотрим этот вариант использования:
в тесте mocha для конечной точки Вход
Способ 1
describe('Login Endpoint Test', function(){
let response = null;
before('test pre-requisites', async function(){
this.timeout(15000);
response = await endpointCall(); //returns response Object
});
it('simple endpoint test', function(){
//response is availble here.
response.should.have.status(200);
});
/*Importing an external testfile.*/
require('./externalTest.spec.js')(response);
})
в externalTest.spec.js
module.exports = (response) => {
it('external test', function(){
console.log(response); // null;
})
}
Если я оберну ответ в Object
, он сработает. Почему это так?
Способ 2
Если я оберну ответ в Object
, он сработает. Почему это так?
describe('Login Endpoint Test', function(){
let data = {response: null};
before('test pre-requisites', async function(){
this.timeout(15000);
data.response = await endpointCall(); //returns response Object
});
it('simple endpoint test', function(){
//response is availble here.
data.response.should.have.status(200);
});
/*Importing an external testfile.*/
require('./externalTest.spec.js')(data);
})
в externalTest.spec.js
module.exports = (data) => {
it('external test', function(){
console.log(data.response); // response object;
})
}
ПРИМЕЧАНИЕ. Пожалуйста, дайте мне знать, если вы обнаружите неясность. Заранее спасибо.
response = ...
в обратном вызове.response.property = ...
работает. Объявитеresponse
какconst
вместоlet
, чтобы лучше запомнить ;) - person Lennholm   schedule 09.06.2021function delay(t, val) { return new Promise(function(resolve) { setTimeout(function() { resolve(val); }, t); }); } let someFunc = async function(){ let data = null; data = await(delay(3000, {'key':'value'})); console.log('inside someFunc : ', data); someExtFunc(data); } let someExtFunc = (data) => { console.log('inside someExtFunc :',data); } someFunc();
@Lennholm - person DevDesignerSid   schedule 09.06.2021it
пытается прочитать переменнуюresponse
из общей области. - person DevDesignerSid   schedule 09.06.2021data = await delay(...);
, поэтому в этот момент, как толькоdelay
разрешается,data
имеет любое значение, полученное изdelay()
. Затем вы передаете это непосредственноsomeExtFunc
-- я не вижу никакой возможности, чтобы что-то было отброшено. - person TKoL   schedule 09.06.2021method #1
иmethod #2
, потому что нет четких примеров кода. Я думаю, что весь этот вопрос и ваш ответ будут значительно улучшены с помощью конкретных примеров кода. - person TKoL   schedule 09.06.2021heap
иstack
— это понятия, которые на самом деле не важны и не требуются для понимания того, что происходит с этими переменными. Я не понимаю, какое отношение они имеют к вопросу, который, я думаю, вы задаете. - person TKoL   schedule 09.06.2021