Esto puede ser obvio para otros, pero no conozco la sintaxis para llamar a una función de forma recursiva en el siguiente código:
//request.js export default { send() { ... do stuff ... this.send(); // Can't call "send" of undefined } } //main.js import request from './request' export default class Main extends Component { init() { request.send(); } }En el ejemplo anterior, llamo a la función de envío desde main.js. Todo esto funciona bien, pero tengo una condición en la función de envío que recuperará la misma función. El problema es que no tengo idea de cómo llamar a la función desde dentro de la función. ¿Cualquiera?
Si desea llamar a la exportación predeterminada de forma recursiva en Node.js, usando Babel.js para transpilar, puede usar el objeto de exportación:
// request.js export default { send() { console.log('Yo'); setTimeout(() => { exports.default.send(); }, 1000); }, };Importador:
// main.js import request from './request'; request.send(); // Writes "Yo" to the console once per secondEsto se debe a que Babel.js simplemente se transforma a la sintaxis de CommonJS. Este:
export default 42;Se convierte en esto:
Object.defineProperty(exports, "__esModule", { value: true }); exports.default = 42;No tengo idea de cómo puede cambiar esto en una implementación futura de módulos ES6 en Node.js.
No veo ninguna razón por la que this.send() no funcione, dado que está exportando un objeto con un método.
Pero si no funciona, siempre puede usar una expresión de función con nombre:
export default { send: function send() { … send() … } };o una declaración de función con nombre:
function send() { … send() … } export default { send };o simplemente nombre su objeto exportado:
export default const request = { send() { … request.send() … } };Pero recomendaría no exportar un objeto de forma predeterminada y usar exportaciones con nombre en su lugar para que pueda importarlas por separado o en un objeto de espacio de nombres:
// request.js export default function send() { … send() … } // main.js import * as request from './request' … request.send()bueno, solo como un vistazo rápido, diría que deberías
console.log(this)para ver el valor de la misma en la primera y segunda solicitud. No creé su código para verificarlo, pero supongo que es un problema con su contexto.
Todavía no estoy seguro de lo que intenta lograr, pero siempre puede usar
someFunction.bind(this)de nuevo, es bastante vago, pero tal vez te dé una idea.