繁体   English   中英

从异步 function 中获取返回值而不再次调用它

[英]get the return value from async function without calling it again

这是代码:

const onStartRecord = async() => {
  try {
    const path = Platform.select({
      ios: `file:///audio/${filenameGenerator}.m4a`,
      android: `file:///audio/${filenameGenerator}.mp4`,
    });
    const audioSet: AudioSet = {
      AudioEncoderAndroid: AudioEncoderAndroidType.AAC,
      AudioSourceAndroid: AudioSourceAndroidType.MIC,
      AVEncoderAudioQualityKeyIOS: AVEncoderAudioQualityIOSType.high,
      AVNumberOfChannelsKeyIOS: 2,
      AVFormatIDKeyIOS: AVEncodingOption.aac,
    };
    console.log('audioSet', audioSet);
    const uri = await audioRecorderPlayer.startRecorder(path, audioSet);
    audioRecorderPlayer.addRecordBackListener((e: any) => {
      setAudioProp(audioProp => {
        return { ...audioProp,
          recordSecs: e.current_position,
          recordTime: audioRecorderPlayer.mmssss(Math.floor(e.current_position)),
        }
      });

    });

    console.log(`uri: ${uri}`);
    return uri
  } catch (err) {
    console.log(err);
    return;
  }
};

const audioPath = async() => {
  const result = await onStartRecord();
  return result;
}

const onSubmit = async() => {
  const audiopath = await audioPath();
  console.log("this is the audiopath", audiopath)
}
};

当我触发 onSubmit function 时,我可以得到我想要的,但问题是,它还会再次触发 onStartRecord function,这将在我的情况下导致错误,我只想获取 onStartRecord 解决时生成的 uri,但我没有不想再次触发,如果需要使用 onSubmit function 并从 onStartRecord 中获取值怎么办? 谢谢 !

而不是返回urionStartRecord应该将其分配给全局变量。

然后audioPath()可以返回该变量。

let savedAudioPath;

const onStartRecord = async() => {
  try {
    const path = Platform.select({
      ios: `file:///audio/${filenameGenerator}.m4a`,
      android: `file:///audio/${filenameGenerator}.mp4`,
    });
    const audioSet: AudioSet = {
      AudioEncoderAndroid: AudioEncoderAndroidType.AAC,
      AudioSourceAndroid: AudioSourceAndroidType.MIC,
      AVEncoderAudioQualityKeyIOS: AVEncoderAudioQualityIOSType.high,
      AVNumberOfChannelsKeyIOS: 2,
      AVFormatIDKeyIOS: AVEncodingOption.aac,
    };
    console.log('audioSet', audioSet);
    const uri = await audioRecorderPlayer.startRecorder(path, audioSet);
    audioRecorderPlayer.addRecordBackListener((e: any) => {
      setAudioProp(audioProp => {
        return { ...audioProp,
          recordSecs: e.current_position,
          recordTime: audioRecorderPlayer.mmssss(Math.floor(e.current_position)),
        }
      });

    });

    console.log(`uri: ${uri}`);
    savedAudioPath = uri;
  } catch (err) {
    console.log(err);
    return;
  }
};

const audioPath = async () => savedAudioPath;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM